{"id":3818,"date":"2025-06-21T22:51:10","date_gmt":"2025-06-21T14:51:10","guid":{"rendered":"https:\/\/fushuling.com\/?p=3818"},"modified":"2025-06-28T19:59:32","modified_gmt":"2025-06-28T11:59:32","slug":"%e6%96%b0%e7%94%9flab-1-%e9%80%86%e5%90%91%e5%88%86%e6%9e%90%e7%a8%8b%e5%ba%8f%e5%88%86%e6%9e%90%e5%9f%ba%e7%a1%80","status":"publish","type":"post","link":"https:\/\/fushuling.com\/index.php\/2025\/06\/21\/%e6%96%b0%e7%94%9flab-1-%e9%80%86%e5%90%91%e5%88%86%e6%9e%90%e7%a8%8b%e5%ba%8f%e5%88%86%e6%9e%90%e5%9f%ba%e7%a1%80\/","title":{"rendered":"\u65b0\u751fLab-1 \u9006\u5411\u5206\u6790+\u7a0b\u5e8f\u5206\u6790\u57fa\u7840"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">\u5b89\u5353\u57fa\u7840\u77e5\u8bc6<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">\u5b89\u5353\u7cfb\u7edf\u67b6\u6784<\/h2>\n\n\n\n<p><strong>Android<\/strong> \u662f\u4e00\u4e2a\u7531 Google \u4e3b\u5bfc\u5f00\u53d1\u7684 <strong>\u57fa\u4e8e Linux \u5185\u6838\u7684\u5f00\u6e90\u64cd\u4f5c\u7cfb\u7edf<\/strong>\uff0c\u6700\u521d\u662f\u4e3a\u79fb\u52a8\u8bbe\u5907\uff08\u5982\u667a\u80fd\u624b\u673a\u548c\u5e73\u677f\u7535\u8111\uff09\u8bbe\u8ba1\u7684\uff0c\u73b0\u5728\u4e5f\u88ab\u5e7f\u6cdb\u7528\u4e8e <strong>\u667a\u80fd\u7535\u89c6\u3001\u53ef\u7a7f\u6234\u8bbe\u5907\u3001\u6c7d\u8f66\u7cfb\u7edf\uff08Android Auto\uff09\u3001IoT\u8bbe\u5907\u7b49<\/strong>\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250621-215022-21-1.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250621-215022-21-1.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>Android\u7cfb\u7edf\u67b6\u6784\u5171\u5206\u56db\u5c42\uff0c\u4ece\u4e0b\u5f80\u4e0a\u5206\u522b\u662f\uff1a<strong>Linux\u5185\u6838\u5c42<\/strong>\u3001<strong>\u7cfb\u7edf\u8fd0\u884c\u5e93\u5c42<\/strong>\uff08\u7a0b\u5e8f\u5e93+android\u8fd0\u884c\u5e93\uff09\u3001<strong>\u5e94\u7528\u7a0b\u5e8f\u6846\u67b6\u5c42<\/strong>\u3001<strong>\u5e94\u7528\u5c42<\/strong>\u3002<\/p>\n\n\n\n<p><strong>Llnux\u5185\u6838\u5c42\uff1a<\/strong>&nbsp;Android \u7684 Linux \u5185\u6838\u5c42\u662f\u6574\u4e2a\u7cfb\u7edf\u7684\u57fa\u7840\uff0c\u8d1f\u8d23\u7ba1\u7406\u5e95\u5c42\u786c\u4ef6\u8d44\u6e90\u548c\u7cfb\u7edf\u670d\u52a1\uff0c\u5305\u62ec\u8fdb\u7a0b\u7ba1\u7406\u3001\u5185\u5b58\u7ba1\u7406\u3001\u7535\u6e90\u7ba1\u7406\u3001\u7f51\u7edc\u901a\u4fe1\u548c\u6587\u4ef6\u7cfb\u7edf\u7b49\uff0c\u540c\u65f6\u8fd8\u96c6\u6210\u4e86 Android \u7279\u6709\u7684\u6a21\u5757\u5982 Binder\uff08\u7528\u4e8e\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff09\u3001Ashmem\uff08\u533f\u540d\u5171\u4eab\u5185\u5b58\uff09\u548c Wakelocks\uff08\u7535\u6e90\u63a7\u5236\uff09\uff0c\u4e3a\u4e0a\u5c42\u5e94\u7528\u63d0\u4f9b\u4e00\u4e2a\u7a33\u5b9a\u3001\u9ad8\u6548\u4e14\u5b89\u5168\u7684\u8fd0\u884c\u73af\u5883\u3002<\/p>\n\n\n\n<p><strong>\u7cfb\u7edf\u8fd0\u884c\u5e93\u5c42<\/strong>\uff1aAndroid \u7684\u7cfb\u7edf\u8fd0\u884c\u5e93\u5c42\u5305\u62ec\u4e24\u90e8\u5206\uff1a<strong>\u539f\u751f\u7a0b\u5e8f\u5e93\uff08Native Libraries\uff09<strong>\u548c<\/strong>Android \u8fd0\u884c\u65f6\uff08ART\uff09<\/strong>\u3002\u539f\u751f\u5e93\u7531 C\/C++ \u7f16\u5199\uff0c\u63d0\u4f9b\u5e95\u5c42\u529f\u80fd\u652f\u6301\uff0c\u5982\u56fe\u5f62\u6e32\u67d3\uff08OpenGL ES\uff09\u3001\u6570\u636e\u5e93\uff08SQLite\uff09\u3001\u97f3\u89c6\u9891\u5904\u7406\uff08Media\uff09\u3001\u7f51\u9875\u6e32\u67d3\uff08WebKit\uff09\u7b49\uff0c\u662f\u7cfb\u7edf\u548c\u5e94\u7528\u6b63\u5e38\u8fd0\u884c\u7684\u57fa\u7840\uff1b\u800c Android \u8fd0\u884c\u65f6\u7528\u4e8e\u6267\u884c\u5e94\u7528\u7684 Java\/Kotlin \u4ee3\u7801\uff0c\u81ea Android 5.0 \u8d77\u4f7f\u7528 ART\uff08\u66ff\u4ee3 Dalvik \u865a\u62df\u673a\uff0c\u540e\u9762\u4f1a\u5355\u72ec\u4ecb\u7ecd\uff09\uff0c\u91c7\u7528 AOT \u7f16\u8bd1\u65b9\u5f0f\u63d0\u5347\u6027\u80fd\uff0c\u5e76\u63d0\u4f9b\u6838\u5fc3 Java \u7c7b\u5e93\u652f\u6301\u5e94\u7528\u8fd0\u884c\u3002\u4e24\u8005\u5171\u540c\u4e3a\u4e0a\u5c42\u6846\u67b6\u548c\u5e94\u7528\u63d0\u4f9b\u5173\u952e\u7684\u529f\u80fd\u652f\u6491\u4e0e\u6267\u884c\u73af\u5883\u3002<\/p>\n\n\n\n<p><strong>\u5e94\u7528\u7a0b\u5e8f\u6846\u67b6\u5c42<\/strong>\uff1a\u5e94\u7528\u7a0b\u5e8f\u6846\u67b6\u5c42\u662f Android \u67b6\u6784\u4e2d\u8fde\u63a5\u7cfb\u7edf\u529f\u80fd\u4e0e\u5e94\u7528\u5f00\u53d1\u7684\u6865\u6881\uff0c\u5411\u5f00\u53d1\u8005\u63d0\u4f9b\u4e86\u4e30\u5bcc\u7684 API \u63a5\u53e3\u548c\u6838\u5fc3\u7ec4\u4ef6\uff0c\u4f7f\u5e94\u7528\u53ef\u4ee5\u8c03\u7528\u7cfb\u7edf\u670d\u52a1\u5e76\u5b9e\u73b0\u590d\u6742\u529f\u80fd\u3002\u5b83\u5c01\u88c5\u4e86\u5e38\u7528\u7cfb\u7edf\u529f\u80fd\u6a21\u5757\uff0c\u5982 Activity \u7ba1\u7406\uff08ActivityManager\uff09\u3001\u7a97\u53e3\u7ba1\u7406\uff08WindowManager\uff09\u3001\u5305\u7ba1\u7406\uff08PackageManager\uff09\u3001\u5185\u5bb9\u63d0\u4f9b\uff08ContentProvider\uff09\u3001\u8d44\u6e90\u7ba1\u7406\uff08ResourceManager\uff09\u7b49\uff0c\u5f00\u53d1\u8005\u901a\u8fc7\u8c03\u7528\u8fd9\u4e9b\u6846\u67b6\u7c7b\uff0c\u65e0\u9700\u5173\u6ce8\u5e95\u5c42\u5b9e\u73b0\u5373\u53ef\u6784\u5efa\u529f\u80fd\u5b8c\u6574\u7684\u5e94\u7528\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u4e9b\u5b89\u5353api\u3002\u8fd9\u4e00\u5c42\u786e\u4fdd\u4e86\u5e94\u7528\u7684\u7edf\u4e00\u884c\u4e3a\u548c\u7cfb\u7edf\u7684\u53ef\u7ba1\u7406\u6027\u3002<\/p>\n\n\n\n<p><strong>\u5e94\u7528\u5c42\uff1a<\/strong>\u5e94\u7528\u5c42\u662f Android \u67b6\u6784\u4e2d\u6700\u4e0a\u5c42\u7684\u4e00\u5c42\uff0c\u5305\u542b\u6240\u6709\u7cfb\u7edf\u9884\u88c5\u5e94\u7528\uff08\u5982\u7535\u8bdd\u3001\u77ed\u4fe1\u3001\u8bbe\u7f6e\uff09\u548c\u7528\u6237\u5b89\u88c5\u7684\u7b2c\u4e09\u65b9\u5e94\u7528\uff08\u5982\u5fae\u4fe1\u3001\u6296\u97f3\u7b49\uff09\u3002\u8fd9\u4e9b\u5e94\u7528\u901a\u8fc7\u8c03\u7528\u4e0b\u5c42\u7684\u5e94\u7528\u7a0b\u5e8f\u6846\u67b6\u63a5\u53e3\u4e0e\u7cfb\u7edf\u4ea4\u4e92\uff0c\u5b8c\u6210\u754c\u9762\u5c55\u793a\u3001\u6570\u636e\u5904\u7406\u548c\u7528\u6237\u64cd\u4f5c\u54cd\u5e94\u3002\u6bcf\u4e2a\u5e94\u7528\u90fd\u8fd0\u884c\u5728\u72ec\u7acb\u7684\u8fdb\u7a0b\u4e2d\uff0c\u62e5\u6709\u72ec\u7acb\u7684\u865a\u62df\u673a\u73af\u5883\uff0c\u6253\u5305\u4e3a APK \u6587\u4ef6\u8fdb\u884c\u5206\u53d1\u548c\u5b89\u88c5\u3002\u5e94\u7528\u5c42\u662f\u7528\u6237\u4e0e Android \u7cfb\u7edf\u4ea4\u4e92\u7684\u76f4\u63a5\u7a97\u53e3\uff0c\u4f53\u73b0\u4e86 Android \u7cfb\u7edf\u7684\u529f\u80fd\u548c\u7528\u6237\u4f53\u9a8c\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dalvik\u865a\u62df\u673a\u4e0eART\u865a\u62df\u673a<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Dalvik\u865a\u62df\u673a<\/h3>\n\n\n\n<p>Dalvik \u865a\u62df\u673a\u662f Android \u7cfb\u7edf\u65e9\u671f\u7528\u4e8e\u8fd0\u884c\u5e94\u7528\u7a0b\u5e8f\u7684\u865a\u62df\u673a\uff0c\u5b83\u5c06 Java \u5b57\u8282\u7801\u8f6c\u6362\u4e3a\u4e00\u79cd\u540d\u4e3a <strong>.dex\uff08Dalvik Executable\uff09<\/strong> \u7684\u683c\u5f0f\uff0c\u4ee5\u4f18\u5316\u5185\u5b58\u4f7f\u7528\u548c\u591a\u8fdb\u7a0b\u8fd0\u884c\u6027\u80fd\uff0cDalvik\u865a\u62df\u673a\u6bcf\u6b21\u5e94\u7528\u8fd0\u884c\u7684\u65f6\u5019\uff0c\u5c06\u4ee3\u7801\u7f16\u8bd1\u6210\u673a\u5668\u8bed\u8a00\u6267\u884c\u3002\u4e0e\u6807\u51c6\u7684 Java \u865a\u62df\u673a\uff08JVM\uff09\u4e0d\u540c\uff0cDalvik \u91c7\u7528\u7684\u662f <strong>\u5bc4\u5b58\u5668\u67b6\u6784<\/strong>\uff08\u800c\u975e JVM \u7684\u6808\u67b6\u6784\uff09\uff0c\u66f4\u9002\u5408\u5728\u8d44\u6e90\u53d7\u9650\u7684\u79fb\u52a8\u8bbe\u5907\u4e0a\u8fd0\u884c\u3002\u6b64\u5916\uff0cDalvik \u652f\u6301\u591a\u4e2a\u865a\u62df\u673a\u5b9e\u4f8b\u540c\u65f6\u8fd0\u884c\uff0c\u786e\u4fdd\u6bcf\u4e2a\u5e94\u7528\u90fd\u5728\u72ec\u7acb\u8fdb\u7a0b\u548c\u865a\u62df\u673a\u4e2d\u8fd0\u884c\uff0c\u4ece\u800c\u63d0\u5347\u4e86\u7cfb\u7edf\u7684\u7a33\u5b9a\u6027\u548c\u5b89\u5168\u6027\u3002\u81ea Android 5.0 \u8d77\uff0cDalvik \u88ab\u6027\u80fd\u66f4\u9ad8\u7684 ART\uff08Android Runtime\uff09\u6240\u53d6\u4ee3\u3002<\/p>\n\n\n\n<p>DVM\u4e0eJVM\u6709\u5f88\u591a\u4e0d\u540c\u4e4b\u5904\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>JVM\u8fd0\u884c\u7684\u662fJava\u5b57\u8282\u7801,DM\u8fd0\u884c\u7684\u662f Dalvik\u5b57\u8282\u7801\u3002<\/strong>\u4f20\u7edfjava\u7a0b\u5e8f\u7ecf\u8fc7\u7f16\u8bd1\uff0c\u751f\u6210java\u5b57\u8282\u7801\u4fdd\u5b58\u5728class\u6587\u4ef6\u4e2d\uff0cjava\u865a\u62df\u673a\u901a\u8fc7\u89e3\u7801class\u6587\u4ef6\u6765\u8fd0\u884c\u7a0b\u5e8f\uff0c\u800c Dalvik\u865a\u62df\u673a\u8fd0\u884c\u7684\u662fDalvik\u5b57\u8282\u7801\uff0c\u6240\u6709\u7684Dalvik\u5b57\u8282\u7801\u90fd\u7531java\u5b57\u8282\u7801\u8f6c\u6362\u800c\u6765\uff0c\u5e76\u6253\u5305\u5230\u4e00\u4e2adex\u53ef\u6267\u884c\u6587\u4ef6\uff08.dex\uff09,Dalvik\u865a\u62df\u673a\u901a\u8fc7\u89e3\u91caDEX\u6587\u4ef6\u6765\u6267\u884c\u5b57\u8282\u7801<\/li>\n\n\n\n<li><strong>DVM\u662f\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u865a\u62df\u673a&nbsp;\u800cJVM\u6267\u884c\u662f\u57fa\u4e8e\u865a\u62df\u6808\u7684\u865a\u62df\u673a<\/strong>\u3002\u5bc4\u5b58\u5668\u5b58\u53d6\u901f\u5ea6\u6bd4\u6808\u5feb\u7684\u591a\uff0cdvm\u53ef\u4ee5\u6839\u636e\u786c\u4ef6\u5b9e\u73b0\u6700\u5927\u7684\u4f18\u5316\uff0c\u6bd4\u8f83\u9002\u5408\u79fb\u52a8\u8bbe\u5907\u3002\u4e14\u5bf9\u4e8e\u76f8\u540c\u7684\u4ee3\u7801\u751f\u6210\u7684\u5b57\u8282\u7801\uff0cDalvik\u5b57\u8282\u7801\u4e5f\u4f1a\u6bd4java\u5b57\u8282\u7801\u66f4\u7b80\u5355\uff0c\u6307\u4ee4\u66f4\u5c11\u3002<\/li>\n\n\n\n<li><strong>dvm\u6267\u884c\u7684\u662f.dex\u683c\u5f0f\u6587\u4ef6\uff0cjvm\u6267\u884c\u7684\u662f.class\u6587\u4ef6<\/strong>\u3002.dex\u6587\u4ef6\uff0c\u662fDVM\u72ec\u6709\u7684\u6267\u884c\u6587\u4ef6\u683c\u5f0f\uff0c\u4f53\u79ef\u66f4\u5c0f\uff0c\u901f\u5ea6\u8ddf\u5feb\uff0c\u5360\u7528\u7a7a\u95f4\u66f4\u5c11\u3002<\/li>\n\n\n\n<li><strong>\u8fd0\u884c\u73af\u5883\u7684\u533a\u522b<\/strong>\u3002Dalvik \u7ecf\u8fc7\u4f18\u5316\uff0c\u5141\u8bb8\u5728\u6709\u9650\u7684\u5185\u5b58\u4e2d\u540c\u65f6\u8fd0\u884c\u591a\u4e2a\u865a\u62df\u673a\u7684\u5b9e\u4f8b\uff0c\u5e76\u4e14\u6bcf\u4e00\u4e2aDalvik \u5e94\u7528\u4f5c\u4e3a\u4e00\u4e2a\u72ec\u7acb\u7684Linux \u8fdb\u7a0b\u6267\u884c\u3002\u72ec\u7acb\u7684\u8fdb\u7a0b\u53ef\u4ee5\u9632\u6b62\u5728\u865a\u62df\u673a\u5d29\u6e83\u7684\u65f6\u5019\u6240\u6709\u7a0b\u5e8f\u90fd\u88ab\u5173\u95ed\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">ART\u865a\u62df\u673a<\/h3>\n\n\n\n<p>\u5c31Dalvik\u865a\u62df\u673a\u800c\u8a00\uff0c\u6211\u4eec\u6bcf\u7528\u624b\u673a\u8fd0\u884c\u4e00\u4e2a\u7a0b\u5e8f\uff0c\u90fd\u4f1a\u5bf9\u5e94\u7684\u4ea7\u751f\u4e00\u4e2a\u4e92\u4e0d\u5f71\u54cd\u7684\u5b9e\u4f8b\uff0c\u8fd9\u5c31\u5bfc\u81f4\u53ef\u80fd\u4f1a\u5360\u7528\u8fc7\u591a\u7684\u8d44\u6e90\uff0c\u4e0d\u591f\u4f18\u96c5\uff0c\u56e0\u6b64\u4fc3\u6210\u4e86ART\u865a\u62df\u673a\u7684\u8bde\u751f\u3002<\/p>\n\n\n\n<p>ART\uff08Android Runtime\uff09\u662f Android 5.0 \u53ca\u4ee5\u4e0a\u7248\u672c\u4e2d\u66ff\u4ee3 Dalvik \u7684\u5e94\u7528\u8fd0\u884c\u73af\u5883\uff0c\u5b83\u7684\u6838\u5fc3\u7279\u70b9\u662f\u91c7\u7528 <strong>AOT\uff08Ahead-Of-Time\uff09\u7f16\u8bd1<\/strong>\uff0c\u5373\u5728\u5e94\u7528\u5b89\u88c5\u65f6\u5c31\u5c06\u5b57\u8282\u7801\u7f16\u8bd1\u4e3a\u672c\u5730\u673a\u5668\u7801\uff0c\u4ece\u800c\u63d0\u5347\u8fd0\u884c\u6548\u7387\u3001\u51cf\u5c11\u542f\u52a8\u65f6\u95f4\u3001\u964d\u4f4e\u7535\u91cf\u6d88\u8017\u3002\u4e0e Dalvik \u7684 JIT\uff08\u5373\u65f6\u7f16\u8bd1\uff09\u4e0d\u540c\uff0cART \u63d0\u4f9b\u66f4\u597d\u7684\u6027\u80fd\u548c\u66f4\u4f4e\u7684\u5185\u5b58\u5f00\u9500\u3002ART \u8fd8\u652f\u6301\u8fd0\u884c\u65f6\u4f18\u5316\u3001\u5783\u573e\u56de\u6536\uff08GC\uff09\u6539\u8fdb\u3001\u8c03\u8bd5\u548c\u6027\u80fd\u5206\u6790\u5de5\u5177\u7b49\u529f\u80fd\uff0c\u662f\u73b0\u4ee3 Android \u5e94\u7528\u9ad8\u6027\u80fd\u8fd0\u884c\u7684\u5173\u952e\u7ec4\u6210\u90e8\u5206\u3002<\/p>\n\n\n\n<p>\u867d\u7136ART\u66ff\u6362\u4e86Dalvik\u865a\u62df\u673a\uff0c\u4f46\u8fd9\u5e76\u4e0d\u610f\u5473\u7740\u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1\u4e0a\u4e5f\u8981\u53d1\u751f\u6539\u53d8\uff0c\u50cfandroid\u5e94\u7528\u7a0b\u5e8f\u5b89\u88c5\u5305\uff08apk\uff09\u4e2d\uff0c\u4ecd\u7136\u8fd8\u662f\u53ef\u6267\u884c\u7684.dex\u6587\u4ef6\u3002DVM\u662f\u5728\u6bcf\u5f53\u7a0b\u5e8f\u8fd0\u884c\u65f6\uff0c\u901a\u8fc7\u89e3\u91ca\u5668\u6765\u6267\u884cDavlik\u5b57\u8282\u7801\uff0c\u8fdb\u800c\u8f6c\u5316\u6210\u5feb\u901f\u8fd0\u884c\u7684\u673a\u5668\u7801\uff1b\u800cART\u662f\u5728\u7a0b\u5e8f\u5b89\u88c5\u65f6\u5c06\u5b57\u8282\u7801\u9884\u5148\u7f16\u8bd1\u6210\u673a\u5668\u7801\uff0c\u8fd9\u6837\u8fd0\u884c\u7a0b\u5e8f\u5c31\u4e0d\u7528\u518d\u6b21\u7f16\u8bd1\uff0c\u56e0\u6b64\u8fd0\u884c\u901f\u5ea6\u4e5f\u4f1a\u5feb\u7684\u591a\u3002\u4f5c\u4e3a\u6027\u80fd\u4f18\u5316\u7684\u4ee3\u4ef7\uff0c\u76f8\u5bf9\u800c\u8a00ART\u5b89\u88c5\u7a0b\u5e8f\u8017\u65f6\u4f1a\u957f\u4e00\u70b9\uff0c\u7531\u4e8e\u9884\u7f16\u8bd1\u673a\u5668\u7801\u4e5f\u5bfc\u81f4\u6240\u5360\u7684\u5b58\u50a8\u7a7a\u95f4\u4e5f\u4f1a\u66f4\u5927\u4e00\u70b9\uff0c\u4e0d\u8fc7ART\u662f\u652f\u630164\u4f4d\u5e76\u4e14\u517c\u5bb932\u4f4dCPU\u7684\uff0c\u800cDVM\u53ea\u662f\u4e3a32\u4f4dCPU\u8bbe\u8ba1\u7684\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Android\u5e94\u7528\u7a0b\u5e8f\u67b6\u6784<\/h2>\n\n\n\n<p>\u5b89\u5353\u5e94\u7528\u7a0b\u5e8f\u4f7f\u7528JAVA\u8bed\u8a00\u7f16\u5199\u3002\u5b89\u5353\u7684SDK\u5de5\u5177\u8d1f\u8d23\u5c06\u4f60\u7f16\u5199\u7684\u4ee3\u7801\uff0c\u7528\u5230\u7684\u6570\u636e\u548c\u8d44\u6e90\u6587\u4ef6\u7f16\u8bd1\u8fdbAPK\u6587\u4ef6\u4e2d\uff0cAPK\uff1aandroid package\uff08\u5e94\u7528\u7a0b\u5e8f\u5b89\u88c5\u5305\uff09\uff0c\u5305\u542b\u4e86\u4e00\u4e2a\u5b89\u5353\u5e94\u7528\u7a0b\u5e8f\u7684\u6240\u6709\u5185\u5bb9\uff0c\u5e76\u4e14\u88ab\u5b89\u5353\u8bbe\u5907\u7528\u6765\u5b89\u88c5\u5e94\u7528\u7a0b\u5e8f\u3002\u800capk\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u4e2a\u6807\u51c6\u7684zip\u683c\u5f0f\uff0c\u4fee\u6539\u540e\u7f00\u540d\uff0c\u8fdb\u884c\u89e3\u538b\u5c31\u53ef\u4ee5\u770b\u5230\u5185\u90e8\u7ed3\u6784\uff08\u7c7b\u4f3c\u4e8ewar\u6216\u8005jar\uff0c\u90fd\u662f\u53ef\u4ee5\u76f4\u63a5\u89e3\u538b\u7684\uff09\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250621-222949-21-3.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250621-222949-21-3.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>assets\u6587\u4ef6\u5939\uff1a<\/strong>&nbsp;\u4fdd\u5b58\u4e00\u4e9b\u989d\u5916\u7684\u8d44\u6e90\u6587\u4ef6\uff0c\u5982\u6e38\u620f\u7684\u58f0\u97f3\u6587\u4ef6\uff0c\u5b57\u4f53\u6587\u4ef6\u7b49\u7b49\uff0c\u5728\u4ee3\u7801\u4e2d\u53ef\u4ee5\u7528AssetManager\u83b7\u53d6assets\u6587\u4ef6\u5939\u7684\u8d44\u6e90\u3002<\/li>\n\n\n\n<li><strong>lib\u6587\u4ef6\u5939\uff1a<\/strong>&nbsp;\u5b58\u653e\u7528C\/C++\u7f16\u5199\u7684\uff0c\u7528NDK\u7f16\u8bd1\u751f\u6210\u7684so\u6587\u4ef6\uff0c\u4f9bjava\u7aef\u8c03\u7528\u3002<\/li>\n\n\n\n<li><strong>META-INF\u6587\u4ef6\u5939\uff1a<\/strong>&nbsp;\u5b58\u653eapk\u7b7e\u540d\u4fe1\u606f\uff0c\u7528\u6765\u4fdd\u8bc1apk\u5305\u7684\u5b8c\u6574\u6027\u548c\u7cfb\u7edf\u7684\u5b89\u5168\u3002\u5728IDE\u7f16\u8bd1\u751f\u6210\u4e00\u4e2aapk\u5305\u65f6\uff0c\u4f1a\u5bf9\u91cc\u9762\u6240\u6709\u7684\u6587\u4ef6\u505a\u4e00\u4e2a\u6821\u9a8c\u8ba1\u7b97\uff0c\u5e76\u628a\u8ba1\u7b97\u7ed3\u679c\u5b58\u653e\u5728META-INF\u6587\u4ef6\u5939\u5185\uff0capk\u5728\u5b89\u88c5\u7684\u65f6\u5019\uff0c\u7cfb\u7edf\u4f1a\u6309\u7167\u540c\u6837\u7684\u7b97\u6cd5\u5bf9apk\u5305\u91cc\u9762\u7684\u6587\u4ef6\u505a\u6821\u9a8c\uff0c\u5982\u679c\u7ed3\u679c\u4e0eMETA-INF\u91cc\u9762\u7684\u503c\u4e0d\u4e00\u6837\uff0c\u7cfb\u7edf\u5c31\u4e0d\u4f1a\u5b89\u88c5\u8fd9\u4e2aapk\uff0c\u8fd9\u5c31\u4fdd\u8bc1\u4e86apk\u5305\u91cc\u7684\u6587\u4ef6\u4e0d\u80fd\u88ab\u968f\u610f\u66ff\u6362\u3002\u6bd4\u5982\u62ff\u5230\u4e00\u4e2aapk\u5305\u540e\uff0c\u5982\u679c\u60f3\u8981\u66ff\u6362\u91cc\u9762\u7684\u4e00\u5e45\u56fe\u7247\uff0c\u4e00\u6bb5\u4ee3\u7801\uff0c \u6216\u4e00\u6bb5\u7248\u6743\u4fe1\u606f\uff0c\u60f3\u76f4\u63a5\u89e3\u538b\u7f29\u3001\u66ff\u6362\u518d\u91cd\u65b0\u6253\u5305\uff0c\u57fa\u672c\u662f\u4e0d\u53ef\u80fd\u7684\u3002\u5982\u6b64\u4e00\u6765\u5c31\u7ed9\u75c5\u6bd2\u611f\u67d3\u548c\u6076\u610f\u4fee\u6539\u589e\u52a0\u4e86\u96be\u5ea6\uff0c\u6709\u52a9\u4e8e\u4fdd\u62a4\u7cfb\u7edf\u7684\u5b89\u5168\u3002<\/li>\n\n\n\n<li><strong>res\u6587\u4ef6\u5939\uff1a<\/strong>&nbsp;\u5b58\u653e\u8d44\u6e90\u6587\u4ef6\uff0c\u5305\u62ecicon\uff0cxml\u6587\u4ef6<\/li>\n\n\n\n<li><strong>res\/layout\/:<\/strong>&nbsp;\u5b58\u653e\u88ab\u7f16\u8bd1\u4e3a\u5c4f\u5e55\u5e03\u5c40\uff08\u6216\u5c4f\u5e55\u7684\u4e00\u90e8\u5206\uff09\u7684XML\u6587\u4ef6<\/li>\n\n\n\n<li><strong>res\/values\/:<\/strong>&nbsp;\u5b58\u653e\u53ef\u4ee5\u88ab\u7f16\u8bd1\u6210\u5f88\u591a\u7c7b\u578b\u7684\u8d44\u6e90\u6587\u4ef6<\/li>\n\n\n\n<li><strong>array.xml:<\/strong>&nbsp;\u5b9a\u4e49\u6570\u7ec4<\/li>\n\n\n\n<li><strong>string.xml:<\/strong>&nbsp;\u5b9a\u4e49\u5b57\u7b26\u4e32\uff08string\uff09\u503c<\/li>\n\n\n\n<li><strong>AndroidManifest.xml\u6587\u4ef6\uff1a<\/strong>&nbsp;\u5e94\u7528\u7a0b\u5e8f\u914d\u7f6e\u6587\u4ef6\uff0c\u6bcf\u4e2a\u5e94\u7528\u90fd\u5fc5\u987b\u5b9a\u4e49\u548c\u5305\u542b\u7684\uff0c\u5b83\u63cf\u8ff0\u4e86\u5e94\u7528\u7684\u540d\u5b57\u3001\u7248\u672c\u3001\u6743\u9650\u3001\u5f15\u7528\u7684\u5e93\u6587\u4ef6\u7b49\u4fe1\u606f\u3002<\/li>\n\n\n\n<li><strong>classes.dex\u6587\u4ef6\uff1a<\/strong>&nbsp;\u4f20\u7edf Class \u6587\u4ef6\u662f\u7531\u4e00\u4e2a Java \u6e90\u7801\u6587\u4ef6\u751f\u6210\u7684 .Class \u6587\u4ef6\uff0c\u800c Android \u662f\u628a\u6240\u6709 Class \u6587\u4ef6\u8fdb\u884c\u5408\u5e76\u4f18\u5316\uff0c\u7136\u540e\u751f\u6210\u4e00\u4e2a\u6700\u7ec8\u7684 class.dex \u6587\u4ef6\u3002\u5b83\u5305\u542b APK \u7684\u53ef\u6267\u884c\u4ee3\u7801\uff0c\u662f\u5206\u6790 Android \u8f6f\u4ef6\u65f6\u6700\u5e38\u89c1\u7684\u76ee\u6807\u3002\u7531\u4e8edex\u6587\u4ef6\u5f88\u96be\u770b\u61c2\uff0c\u53ef\u901a\u8fc7apktool\u53cd\u7f16\u8bd1\u5f97\u5230.smali\u6587\u4ef6\uff0csmali\u6587\u4ef6\u662f\u5bf9Dalvik\u865a\u62df\u673a\u5b57\u8282\u7801\u7684\u4e00\u79cd\u89e3\u91ca\uff08\u4e5f\u53ef\u4ee5\u8bf4\u662f\u7ffb\u8bd1\uff09\uff0c\u5e76\u975e\u4e00\u79cd\u5b98\u65b9\u6807\u51c6\u8bed\u8a00\u3002\u901a\u8fc7\u5bf9smali\u6587\u4ef6\u7684\u89e3\u8bfb\u53ef\u4ee5\u83b7\u53d6\u6e90\u7801\u7684\u4fe1\u606f\u3002<\/li>\n\n\n\n<li><strong>resources.arsc\u6587\u4ef6\uff1a<\/strong>&nbsp;\u4e8c\u8fdb\u5236\u8d44\u6e90\u6587\u4ef6\uff0c\u5305\u62ec\u5b57\u7b26\u4e32\u7b49\u3002<\/li>\n\n\n\n<li><strong>smali:<\/strong>&nbsp;smali\u662f\u5c06Android\u5b57\u8282\u7801\u7528\u53ef\u9605\u8bfb\u7684\u5b57\u7b26\u4e32\u5f62\u5f0f\u8868\u73b0\u51fa\u6765\u7684\u4e00\u79cd\u8bed\u8a00,\u53ef\u4ee5\u79f0\u4e4b\u4e3aAndroid\u5b57\u8282\u7801\u7684\u53cd\u6c47\u7f16\u8bed\u8a00\u3002\u5229\u7528apktool\u6216\u8005Android Killer\uff0c\u53cd\u7f16classes.dex\u6587\u4ef6\uff0c\u5c31\u53ef\u4ee5\u5f97\u5230\u4ee5smali\u4e3a\u540e\u7f00\u7684\u6587\u4ef6\uff0c\u8fd9\u4e9bsmali\u6587\u4ef6\u5c31\u662fDalvik\u7684\u5bc4\u5b58\u5668\u8bed\u8a00\u3002<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Android\u5e94\u7528\u7f16\u8bd1\u6d41\u7a0b<\/h2>\n\n\n\n<p>Android\u5e94\u7528\u7f16\u8bd1\u6d41\u7a0b\u5c31\u662f\u4e00\u4e2aapp\u5e94\u7528\u7684\u751f\u6210\u8fc7\u7a0b\u3002\u5728\u5e94\u7528\u7a0b\u5e8f\u4e0a\u67b6\u7684\u65f6\u5019\u90fd\u9700\u8981\u7a0b\u5e8f\u7ecf\u8fc7\u7f16\u8bd1\u3001\u7b7e\u540d \u3001\u751f\u6210\u4e00\u4e2a\u540e\u7f00\u4e3aapk\u7684\u6587\u4ef6\u624d\u80fd\u53d1\u5e03\u5230\u5e94\u7528\u5e02\u573a\uff0c\u5927\u81f4\u6d41\u7a0b\u5982\u4e0b\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u6253\u5305\u8d44\u6e90\u6587\u4ef6\uff0c\u751f\u6210R.java\u6587\u4ef6<\/strong>\u3002\u901a\u8fc7\u5229\u7528aapt\u8d44\u6e90\u6253\u5305\u5de5\u5177\uff0c\u5c06\u6587\u4ef6\u76ee\u5f55\u4e2d\u7684Resource\u6587\u4ef6\uff08\u5c31\u662f\u5de5\u7a0b\u4e2dres\u4e2d\u7684\u6587\u4ef6\uff09\u3001Assets\u6587\u4ef6\u3001AndroidManifest.xml\u6587\u4ef6\u3001Android\u57fa\u7840\u7c7b\u5e93\uff08Android.jar\u6587\u4ef6\uff09\u8fdb\u884c\u6253\u5305\uff0c\u751f\u6210R.java<\/li>\n\n\n\n<li><strong>aidl\u751f\u6210Java\u6587\u4ef6<\/strong>\u3002AIDL\u662fAndroid Interface Definition Language\u7684\u7b80\u79f0\uff0c \u662fAndroid\u8de8\u8fdb\u7a0b\u901a\u8baf\u7684\u4e00\u79cd\u65b9\u5f0f\u3002 \u68c0\u7d22\u5de5\u7a0b\u91cc\u6240\u6709\u7684aidl\u6587\u4ef6\uff0c\u5e76\u8f6c\u6362\u4e3a\u5bf9\u5e94\u7684Java\u6587\u4ef6<\/li>\n\n\n\n<li><strong>\u7f16\u8bd1Java\u6587\u4ef6\uff0c\u751f\u6210\u5bf9\u5e94\u7684.class\u6587\u4ef6<\/strong>\u3002\u5c06R.java\u3001aidl\u751f\u6210\u7684Java\u6587\u4ef6\u3001Java\u6e90\u6587\u4ef6\u901a\u8fc7JDK\u643a\u5e26\u7684Javac\u7f16\u8bd1\u751f\u6210.class\u6587\u4ef6<\/li>\n\n\n\n<li><strong>\u628a.class\u6587\u4ef6\u8f6c\u5316\u6210Davik VM\u652f\u6301\u7684.dex\u6587\u4ef6<\/strong>\u3002\u901a\u8fc7dx\u5de5\u5177\u5c06.class\u6587\u4ef6\u751f\u6210\u4e3aclasses.dex<\/li>\n\n\n\n<li><strong>\u6253\u5305\u751f\u6210\u672a\u7b7e\u540d\u7684.apk\u6587\u4ef6<\/strong>\u3002\u5229\u7528apkbuilder\u5de5\u5177\uff0c\u5c06resources.arsc\u3001res\u76ee\u5f55\u3001AndroidManifest.xml\u3001assets\u76ee\u5f55\u3001dex\u6587\u4ef6\u6253\u5305\u6210\u672a\u7b7e\u540d\u7684apk<\/li>\n\n\n\n<li><strong>\u5bf9\u672a\u7b7e\u540d.apk\u6587\u4ef6\u8fdb\u884c\u7b7e\u540d<\/strong>\u3002\u4f7f\u7528apksigner\u4e3a\u5b89\u88c5\u5305\u6dfb\u52a0\u7b7e\u540d\u4fe1\u606f\u3002<\/li>\n\n\n\n<li><strong>\u5bf9\u7b7e\u540d\u540e\u7684.apk\u6587\u4ef6\u8fdb\u884c\u5bf9\u9f50\u5904\u7406<\/strong>\u3002\u4f7f\u7528zipalign\u5de5\u5177\u5bf9\u7b7e\u540d\u5305\u8fdb\u884c\u5185\u5b58\u5bf9\u9f50\u64cd\u4f5c\uff0c \u5373\u4f18\u5316\u5b89\u88c5\u5305\u7684\u7ed3\u6784\u3002<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Android\u56db\u5927\u7ec4\u4ef6<\/h2>\n\n\n\n<p>Android \u7684\u56db\u5927\u7ec4\u4ef6\u662f\u6784\u6210\u5e94\u7528\u7a0b\u5e8f\u7684\u6838\u5fc3\u6a21\u5757\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Activity\uff08\u6d3b\u52a8\uff09<\/strong>\u3002\u8868\u793a\u5e94\u7528\u7684\u4e00\u4e2a\u5355\u4e00\u754c\u9762\uff0c\u8d1f\u8d23\u4e0e\u7528\u6237\u8fdb\u884c\u4ea4\u4e92\u3002\u4f8b\u5982\uff0c\u4e00\u4e2a\u767b\u5f55\u9875\u9762\u6216\u8bbe\u7f6e\u9875\u9762\u5c31\u662f\u4e00\u4e2a Activity\u3002<\/li>\n\n\n\n<li><strong>Service\uff08\u670d\u52a1\uff09<\/strong>\u3002\u5728\u540e\u53f0\u8fd0\u884c\u7684\u7ec4\u4ef6\uff0c\u7528\u4e8e\u6267\u884c\u957f\u65f6\u95f4\u8fd0\u884c\u7684\u64cd\u4f5c\uff0c\u5982\u64ad\u653e\u97f3\u4e50\u3001\u4e0b\u8f7d\u6587\u4ef6\u7b49\uff0c\u4e0d\u63d0\u4f9b\u7528\u6237\u754c\u9762\u3002<\/li>\n\n\n\n<li><strong>BroadcastReceiver\uff08\u5e7f\u64ad\u63a5\u6536\u5668\uff09<\/strong>\u3002\u7528\u4e8e\u63a5\u6536\u5e76\u54cd\u5e94\u7cfb\u7edf\u6216\u5e94\u7528\u53d1\u51fa\u7684\u5e7f\u64ad\u6d88\u606f\uff0c\u4f8b\u5982\u63a5\u6536\u77ed\u4fe1\u5230\u8fbe\u3001\u7535\u91cf\u53d8\u5316\u3001\u7f51\u7edc\u72b6\u6001\u6539\u53d8\u7b49\u4e8b\u4ef6\u3002<\/li>\n\n\n\n<li><strong>ContentProvider\uff08\u5185\u5bb9\u63d0\u4f9b\u5668\uff09<\/strong>\u3002\u7528\u4e8e\u5728\u4e0d\u540c\u5e94\u7528\u95f4\u5171\u4eab\u6570\u636e\uff0c\u63d0\u4f9b\u7edf\u4e00\u7684\u6570\u636e\u8bbf\u95ee\u63a5\u53e3\uff0c\u6bd4\u5982\u7cfb\u7edf\u7684\u8054\u7cfb\u4eba\u3001\u56fe\u5e93\u7b49\u6570\u636e\u90fd\u53ef\u4ee5\u901a\u8fc7 ContentProvider \u88ab\u5176\u4ed6\u5e94\u7528\u8bbf\u95ee\u3002<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<p>\u8fd9\u56db\u5927\u7ec4\u4ef6\u5171\u540c\u6784\u6210 Android \u5e94\u7528\u7684\u57fa\u672c\u7ed3\u6784\uff0c\u6bcf\u4e00\u79cd\u90fd\u901a\u8fc7 <code>AndroidManifest.xml<\/code> \u6ce8\u518c\uff0c\u534f\u540c\u5b8c\u6210\u5e94\u7528\u7684\u529f\u80fd\u5b9e\u73b0\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Android\u5e94\u7528\u53cd\u7f16\u8bd1\u6d41\u7a0b<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2Ft0117adc79280ae1133-21-4.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2Ft0117adc79280ae1133-21-4.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" style=\"width:720px;height:auto\"\/><\/div><\/figure>\n\n\n\n<p>Android\u5e94\u7528\u53cd\u7f16\u8bd1\u6d41\u7a0b\u5f88\u663e\u7136\uff0c\u5c31\u662fapp\u751f\u6210\u8fc7\u7a0b\u7684\u9006\u8fc7\u7a0b\uff0c\u5bf9\u4e8e\u6700\u5de6\u8fb9\u7684\u76ee\u6807\u2014\u2014\u672a\u7b7e\u540dapk\uff0c\u6709\u4e24\u6761\u53cd\u7f16\u8bd1\u8def\u7ebf\uff1a<\/p>\n\n\n\n<p><strong>\u53cd\u7f16\u8bd1\u65b9\u5f0f\u4e00\uff1a<\/strong>\u56fe\u4e0a\u9762\u8fd9\u6761\u8def\u7ebf\u662f\u901a\u8fc7\u5229\u7528apktool\u8fd9\u6b3e\u5de5\u5177\uff0c\u53ef\u76f4\u63a5\u5bf9\u76ee\u6807apk\u76f4\u63a5\u8fdb\u884c\u53cd\u7f16\u8bd1\uff0c\u53ef\u4ee5\u770b\u5230\u9664apk\u672c\u8eab\u7684\u8d44\u6e90\u6587\u4ef6\uff0c\u8fd8\u751f\u6210\u4e86smali\u6587\u4ef6\uff0c\u800csmali\u6587\u4ef6\u91cc\u9762\u5305\u542b\u7684\u90fd\u662f\u7a0b\u5e8f\u6267\u884c\u7684\u6838\u5fc3\u4ee3\u7801\u3002\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u76f4\u63a5\u5206\u6790.smali\u6587\u4ef6\u4e2d\u7684smali\u4ee3\u7801\uff0c\u8fdb\u800c\u4fee\u6539\u4ee3\u7801\uff0c\u6539\u53d8\u5176\u8fd0\u884c\u903b\u8f91\u3002<\/p>\n\n\n\n<p>\u4e0b\u8f7d\u5730\u5740\uff1a<a href=\"https:\/\/bitbucket.org\/iBotPeaches\/apktool\/downloads\/\">https:\/\/bitbucket.org\/iBotPeaches\/apktool\/downloads\/<\/a><\/p>\n\n\n\n<p>\u4f7f\u7528\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apktool d target.apk<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250621-223918-21-5.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250621-223918-21-5.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>\u53cd\u7f16\u8bd1\u5b8c\u6210\u540e\u4f1a\u751f\u6210\u6587\u4ef6\u5939\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250621-224014.-21-5png.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250621-224014.-21-5png.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p><strong>\u53cd\u7f16\u8bd1\u65b9\u5f0f\u4e8c\uff1a<\/strong>\u56fe\u4e2d\u4e0b\u9762\u8fd9\u6761\u8def\u7ebf\u662f\u901a\u8fc7\u4fee\u6539apk\u540e\u7f00\u540d\uff0c\u5bf9\u5176\u89e3\u538b\u540e\uff0c\u5c06\u6587\u4ef6\u5939\u4e2d\u7684\u8d44\u6e90\u6587\u4ef6\uff0c\u901a\u8fc7\u5229\u7528AXMLPrinter2\u8fdb\u884c\u5206\u6790\uff0c\u8fdb\u800c\u53cd\u7f16\u8bd1\uff0c\u800c\u5bf9\u4e8e\u89e3\u538b\u540e\u7684class.dex\u6587\u4ef6\uff0c\u5229\u7528Dex2jar\u53cd\u7f16\u8bd1\u5de5\u5177\u5bf9\u5176\u8fdb\u884c\u53cd\u7f16\u8bd1\u5f97\u5230jar\u6587\u4ef6\u3002\u63a5\u7740\u5c06\u751f\u6210\u7684jar\u6587\u4ef6\u76f4\u63a5\u62d6\u5230JD-GUI\u6587\u4ef6\u4e2d\uff0c\u53ef\u81ea\u52a8\u751f\u6210\u6e90\u7801\uff0c\u6211\u4eec\u53ef\u901a\u8fc7\u5206\u6790\u5176\u6e90\u7801\uff0c\u4e86\u89e3\u5176\u7a0b\u5e8f\u7684\u8fd0\u884c\u903b\u8f91\uff0c\u4f46\u6211\u4eec\u4fee\u6539\u903b\u8f91\uff0c\u6700\u7ec8\u8fd8\u662f\u9700\u8981\u5728smali\u6587\u4ef6\u4e2d\u8fdb\u884c\u4fee\u6539\u3002<\/p>\n\n\n\n<p><strong>dex2jar\u4e0b\u8f7d\u5730\u5740\uff1a<\/strong><a href=\"https:\/\/sourceforge.net\/projects\/dex2jar\/files\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/sourceforge.net\/projects\/dex2jar\/files\/<\/a><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dex2jar.bat classes.dex<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250621-224348-21-6.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250621-224348-21-6.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>\u7136\u540e\u53ef\u4ee5\u770b\u5230\u751f\u6210\u4e86\u4e00\u4e2ajar\u6587\u4ef6\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250621-224500-21-7.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250621-224500-21-7.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u628ajar\u6587\u4ef6\u62d6\u5230jd-gui\u91cc\u8fdb\u884c\u53cd\u7f16\u8bd1\uff1a<\/p>\n\n\n\n<p><strong>jd-gui\u4e0b\u8f7d\u5730\u5740\uff1a<\/strong><a href=\"http:\/\/java-decompiler.github.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/java-decompiler.github.io\/<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250621-224643-21-8.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250621-224643-21-8.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>\u9664\u6b64\u4e4b\u5916\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528\u4e00\u628a\u68ad\u5de5\u5177<strong>Android killer<\/strong>\uff0c<strong>\u4e0b\u8f7d\u5730\u5740\uff1a<\/strong><a href=\"https:\/\/down.52pojie.cn\/Tools\/Android_Tools\/AndroidKiller_v1.3.1.zip\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/down.52pojie.cn\/Tools\/Android_Tools\/AndroidKiller_v1.3.1.zip<\/a><\/p>\n\n\n\n<p><strong>Android killer<\/strong>\u96c6<strong>Apk\u53cd\u7f16\u8bd1<\/strong>\u3001<strong>Apk\u6253\u5305<\/strong>\u3001<strong>Apk\u7b7e\u540d<\/strong>\uff0c<strong>\u7f16\u7801\u4e92\u8f6c<\/strong>\uff0c<strong>ADB\u901a\u4fe1<\/strong>\uff08\u5e94\u7528\u5b89\u88c5-\u5378\u8f7d-\u8fd0\u884c-\u8bbe\u5907\u6587\u4ef6\u7ba1\u7406\uff09\u3001<strong>\u6e90\u7801\u67e5\u770b<\/strong>\u7b49\u7279\u8272\u529f\u80fd\u4e8e\u4e00\u8eab\uff0c\u652f\u6301logcat\u65e5\u5fd7\u8f93\u51fa\uff0c\u8bed\u6cd5\u9ad8\u4eae\uff0c\u57fa\u4e8e\u5173\u952e\u5b57\uff08\u652f\u6301\u5355\u884c\u4ee3\u7801\u6216\u591a\u884c\u4ee3\u7801\u6bb5\uff09\u9879\u76ee\u5185\u641c\u7d22\uff0c\u53ef\u81ea\u5b9a\u4e49\u5916\u90e8\u5de5\u5177\uff1b\u5438\u6536\u878d\u6c47\u591a\u79cd\u5de5\u5177\u529f\u80fd\u4e0e\u7279\u70b9\uff0c\u662f\u4e00\u6b3e\u53ef\u89c6\u5316\u7684\u5b89\u5353\u5e94\u7528\u9006\u5411\u5de5\u5177\u3002<\/p>\n\n\n\n<p>\u9664\u6b64\u4e4b\u5916\u8fd8\u6709<strong>jadx-gui<\/strong>\uff0c\u8fd9\u662f\u4e00\u6b3e\u53ef\u4ee5\u5c06apk\uff0cdex\uff0caar \u548c zip \u6587\u4ef6\u5c06 Dalvik \u5b57\u8282\u7801\u53cd\u7f16\u8bd1\u4e3a Java \u7c7b\u7684JAVA\u53cd\u7f16\u8bd1\u5de5\u5177\u3002\u800c\u5b83\u662f\u652f\u6301apk\u3001dex\u3001aar\u3001zip\u7b49\u683c\u5f0f\uff0c\u6240\u4ee5\u6211\u4eec\u5728\u4f7f\u7528\u8fc7\u7a0b\u4e2d\uff0c\u53ef\u76f4\u63a5\u5c06\u5f85\u6d4bapk\u62d6\u5165\u7684\u5de5\u5177\u4e2d\uff0c\u4f1a\u81ea\u52a8\u6267\u884c\u53cd\u7f16\u8bd1\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250621-225018-21-9.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250621-225018-21-9.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p><strong>jadx-gui\u4e0b\u8f7d\u5730\u5740\uff1a<\/strong><a href=\"https:\/\/down.52pojie.cn\/Tools\/Android_Tools\/jadx_v1.3.4.zip\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/down.52pojie.cn\/Tools\/Android_Tools\/jadx_v1.3.4.zip<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u53c2\u8003<\/h2>\n\n\n\n<p><a href=\"https:\/\/www.anquanke.com\/post\/id\/273348\">https:\/\/www.anquanke.com\/post\/id\/273348<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u5b89\u5353Lab<\/h1>\n\n\n\n<p>\u63d0\u524d\u5b89\u88c5Android Studio\uff0c\u5730\u5740\uff1a<a href=\"https:\/\/developer.android.com\/studio\">https:\/\/developer.android.com\/studio<\/a><\/p>\n\n\n\n<p>\u9996\u5148\u65b0\u5efa\u9879\u76ee\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-164350-22-1.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-164350-22-1.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-165143-22-3.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-165143-22-3.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>\u521b\u5efa\u597d\u4e4b\u540e\u53ef\u80fd\u4f1a\u56e0\u4e3aImporting &#8216;Lab&#8217; Gradle Project\u5361\u4e00\u4f1a\u513f\uff0c\u7136\u540e\u521b\u5efa\u4e00\u4e2aactivity\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-165943-22-4.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-165943-22-4.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>\u8fd9\u91cc\u6211\u4eec\u521b\u5efa\u4e00\u4e2a\u865a\u62df\u8bbe\u5907\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-170437-22-5.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-170437-22-5.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>\u6211\u9009\u62e9\u7684\u8fd9\u4e2aPixel 9 Pro\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-171338-22-6.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-171338-22-6.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>\u63a5\u7740\u8fd0\u884c\u8fd9\u4e2a\u8bbe\u5907\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-172039-22-7.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-172039-22-7.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>\u6539\u4e00\u4e0bAndroidManifest.xml\uff0c\u4e0d\u7136\u8fd0\u884c\u4f1a\u62a5Error running &#8216;app&#8217; Default Activity not found<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\n&lt;manifest xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n    package=\"com.smali.secretchallenge\"&gt;\n\n    &lt;application\n        android:allowBackup=\"true\"\n        android:dataExtractionRules=\"@xml\/data_extraction_rules\"\n        android:fullBackupContent=\"@xml\/backup_rules\"\n        android:icon=\"@mipmap\/ic_launcher\"\n        android:label=\"@string\/app_name\"\n        android:roundIcon=\"@mipmap\/ic_launcher_round\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style\/Theme.Lab\"\n        tools:targetApi=\"31\"&gt;\n\n        &lt;activity\n            android:name=\".MainActivity\"\n            android:exported=\"true\"&gt;\n            &lt;intent-filter&gt;\n                &lt;action android:name=\"android.intent.action.MAIN\" \/&gt;\n                &lt;category android:name=\"android.intent.category.LAUNCHER\" \/&gt;\n            &lt;\/intent-filter&gt;\n        &lt;\/activity&gt;\n\n    &lt;\/application&gt;\n\n&lt;\/manifest&gt;<\/code><\/pre>\n\n\n\n<p>\u73b0\u5728\u6211\u4eec\u5c31\u5728\u672c\u5730\u7b80\u5355\u7684\u8fd0\u884c\u4e86\u6211\u4eec\u7684app\uff0c\u4e0b\u9762\u5f00\u59cb\u6b63\u5f0f\u5b8c\u6210\u4efb\u52a1\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-174222-22-8.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-174222-22-8.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1. Android Programming<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Task 1. What\u2019s in Background<\/h3>\n\n\n\n<p><strong>\u4efb\u52a1\u8981\u6c42\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5728com.smali.secretchallenge\u5305\u4e2d\u521b\u5efa\u2f00\u4e2a\u540d\u4e3aSecretBootReceiver\u7684\u65b0\u63a5\u6536\u5668\u7c7b\uff0c\u8ba9\u5e94\u2f64\u7a0b\u5e8f\u5728Android\u7cfb\u7edf\u542f\u52a8\u65f6\u2f83\u52a8\u542f\u52a8\uff0c\u2f46\u9700\u4efb\u4f55\u2f64\u2f3e\u64cd\u4f5c\u5373\u53ef\u5728\u540e\u53f0\u542f\u52a8\u670d\u52a1\u3002<\/li>\n\n\n\n<li>SecretBootReceiver\u542f\u52a8\u7684\u670d\u52a1\u5e94\u547d\u540d\u4e3aSecretService \uff0c\u5e76\u4e14\u4f4d\u4e8ecom.smali.secretchallenge\u5305\u4e2d\uff0c\u8be5\u670d\u52a1\u7684\u529f\u80fd\u5fc5\u987b\u83b7\u53d6\u6b64\u8bbe\u5907\u7684GPS \u4f4d\u7f6e\uff0c\u6bcf 3 \u79d2\u5728\u5c4f\u5e55\u4e0a\u663e\u2f70\u2f00\u6b21\u7eac\u5ea6\u548c\u7ecf\u5ea6\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u9996\u5148\u5728AndroidManifest.xml\u91cc\u505a\u51e0\u4e2a\u6539\u52a8\uff0c\u4e0b\u9762\u662f\u5b8c\u6574\u4ee3\u7801\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\n&lt;manifest xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n    package=\"com.smali.secretchallenge\"&gt;\n\n    &lt;!-- Required permissions --&gt;\n    &lt;uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\" \/&gt;\n    &lt;uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" \/&gt;\n    &lt;uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" \/&gt;\n    &lt;uses-permission android:name=\"android.permission.FOREGROUND_SERVICE\" \/&gt;\n    &lt;uses-permission android:name=\"android.permission.FOREGROUND_SERVICE_LOCATION\" \/&gt;\n\n    &lt;application\n        android:allowBackup=\"true\"\n        android:dataExtractionRules=\"@xml\/data_extraction_rules\"\n        android:fullBackupContent=\"@xml\/backup_rules\"\n        android:icon=\"@mipmap\/ic_launcher\"\n        android:label=\"@string\/app_name\"\n        android:roundIcon=\"@mipmap\/ic_launcher_round\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style\/Theme.Lab\"\n        tools:targetApi=\"31\"&gt;\n\n        &lt;activity\n            android:name=\".MainActivity\"\n            android:exported=\"true\"&gt;\n            &lt;intent-filter&gt;\n                &lt;action android:name=\"android.intent.action.MAIN\" \/&gt;\n                &lt;category android:name=\"android.intent.category.LAUNCHER\" \/&gt;\n            &lt;\/intent-filter&gt;\n        &lt;\/activity&gt;\n\n        &lt;!-- SecretBootReceiver for auto-start on boot --&gt;\n        &lt;receiver\n            android:name=\".SecretBootReceiver\"\n            android:enabled=\"true\"\n            android:exported=\"true\"&gt;\n            &lt;intent-filter&gt;\n                &lt;action android:name=\"android.intent.action.BOOT_COMPLETED\" \/&gt;\n                &lt;category android:name=\"android.intent.category.DEFAULT\" \/&gt;\n            &lt;\/intent-filter&gt;\n        &lt;\/receiver&gt;\n\n        &lt;!-- SecretService for background location tracking --&gt;\n        &lt;service\n            android:name=\".SecretService\"\n            android:enabled=\"true\"\n            android:exported=\"false\" \/&gt;\n\n    &lt;\/application&gt;\n\n&lt;\/manifest&gt;<\/code><\/pre>\n\n\n\n<p>\u8fd9\u91cc\u6211\u4eec\u505a\u4e86\u4e24\u4e2a\u64cd\u4f5c\uff0c\u9996\u5148\u662f\u7533\u8bf7\u6743\u9650\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6743\u9650<\/th><th>\u4f5c\u7528<\/th><th>\u662f\u5426\u654f\u611f\u6743\u9650<\/th><\/tr><\/thead><tbody><tr><td><code>RECEIVE_BOOT_COMPLETED<\/code><\/td><td>\u5141\u8bb8 App \u5728\u8bbe\u5907\u542f\u52a8\u5b8c\u6210\u540e\u6536\u5230 <code>BOOT_COMPLETED<\/code> \u5e7f\u64ad\uff0c\u4e00\u822c\u7528\u4e8e\u5f00\u673a\u81ea\u542f\u52a8\u670d\u52a1\u6216\u4efb\u52a1\u3002<\/td><td>\u662f\uff08\u4e0d\u9700\u8981\u7528\u6237\u624b\u52a8\u6388\u4e88\uff09<\/td><\/tr><tr><td><code>ACCESS_FINE_LOCATION<\/code><\/td><td>\u7cbe\u786e\u5b9a\u4f4d\u6743\u9650\uff0c\u4f7f\u7528 GPS \u5b9a\u4f4d\uff0c\u7cbe\u5ea6\u5728\u51e0\u5341\u7c73\u4ee5\u5185\u3002<\/td><td>\u662f\uff08\u5371\u9669\u6743\u9650\uff0cAndroid 6.0+ \u9700\u8981\u8fd0\u884c\u65f6\u6388\u6743\uff09<\/td><\/tr><tr><td><code>ACCESS_COARSE_LOCATION<\/code><\/td><td>\u7c97\u7565\u5b9a\u4f4d\u6743\u9650\uff0c\u4f7f\u7528\u57fa\u7ad9\u6216 WiFi \u5b9a\u4f4d\uff0c\u7cbe\u5ea6\u5728\u51e0\u767e\u7c73\u5de6\u53f3\u3002<\/td><td>\u662f\uff08\u5371\u9669\u6743\u9650\uff09<\/td><\/tr><tr><td><code>FOREGROUND_SERVICE<\/code><\/td><td>\u5141\u8bb8 App \u542f\u52a8\u524d\u53f0\u670d\u52a1\uff08Foreground Service\uff09\uff0c\u670d\u52a1\u4f1a\u6709\u901a\u77e5\u680f\u63d0\u793a\uff0c\u901a\u5e38\u7528\u4e8e\u6301\u7eed\u4efb\u52a1\uff08\u5982\u4f4d\u7f6e\u8ddf\u8e2a\uff09\u3002<\/td><td>\u5426\uff08Android 9+\uff09<\/td><\/tr><tr><td><code>FOREGROUND_SERVICE_LOCATION<\/code><\/td><td>\u542f\u52a8\u4e13\u7528\u4e8e\u201c\u6301\u7eed\u5b9a\u4f4d\u201d\u7684\u524d\u53f0\u670d\u52a1\u6743\u9650\uff08Android 10+\uff09\u3002<\/td><td>\u662f\uff08\u9700\u8981\u548c <code>FOREGROUND_SERVICE<\/code> \u914d\u5408\u4f7f\u7528\uff09<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!-- Required permissions --&gt;\n&lt;uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\" \/&gt;\n&lt;uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" \/&gt;\n&lt;uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" \/&gt;\n&lt;uses-permission android:name=\"android.permission.FOREGROUND_SERVICE\" \/&gt;\n&lt;uses-permission android:name=\"android.permission.FOREGROUND_SERVICE_LOCATION\" \/&gt;<\/code><\/pre>\n\n\n\n<p>\u63a5\u7740\u662f\u58f0\u660e\u4e86\u4e00\u4e2a\u5e7f\u64ad\u63a5\u6536\u5668\uff0c\u9996\u5148\u6307\u5b9a\u4e86\u8fd9\u4e2a Receiver \u7684\u7c7b\u540d\uff0c<code>BOOT_COMPLETED<\/code> \u662f\u7cfb\u7edf\u5728\u8bbe\u5907\u5f00\u673a\u5b8c\u6210\u540e\u53d1\u9001\u7684\u5e7f\u64ad\uff0c\u53ea\u6709\u62e5\u6709 <code>RECEIVE_BOOT_COMPLETED<\/code> \u6743\u9650\u7684 App \u53ef\u4ee5\u63a5\u6536\u5230\u3002<code>android:exported=\"true\"<\/code> \u8868\u793a\u8fd9\u4e2a\u63a5\u6536\u5668\u53ef\u4ee5\u63a5\u6536\u6765\u81ea\u7cfb\u7edf\u6216\u5176\u4ed6\u5e94\u7528\u7684\u5e7f\u64ad\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;receiver\n    android:name=\".SecretBootReceiver\"\n    android:enabled=\"true\"\n    android:exported=\"true\"&gt;\n    &lt;intent-filter&gt;\n        &lt;action android:name=\"android.intent.action.BOOT_COMPLETED\" \/&gt;\n        &lt;category android:name=\"android.intent.category.DEFAULT\" \/&gt;\n    &lt;\/intent-filter&gt;\n&lt;\/receiver&gt;<\/code><\/pre>\n\n\n\n<p>\u7136\u540e\u662f\u521b\u5efaSecretBootReceiver.java\uff0c\u4f5c\u7528\u662f\u4e00\u4e2a<strong>\u5f00\u673a\u5e7f\u64ad\u63a5\u6536\u5668\uff08BroadcastReceiver\uff09<\/strong>\uff0c\u5b83\u7684\u529f\u80fd\u662f\u76d1\u542c Android \u7cfb\u7edf\u7684\u8bbe\u5907\u542f\u52a8\u5b8c\u6210\u4e8b\u4ef6\uff0c\u7136\u540e\u81ea\u52a8\u542f\u52a8\u4e00\u4e2a\u540e\u53f0\u670d\u52a1 <code>SecretService<\/code>\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.smali.secretchallenge;\n\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.util.Log;\n\npublic class SecretBootReceiver extends BroadcastReceiver {\n    private static final String TAG = \"SecretBootReceiver\";\n\n    @Override\n    public void onReceive(Context context, Intent intent) {\n        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {\n            Log.d(TAG, \"Boot completed received, starting SecretService\");\n            \n            \/\/ Start the SecretService\n            Intent serviceIntent = new Intent(context, SecretService.class);\n            context.startService(serviceIntent);\n        }\n    }\n} <\/code><\/pre>\n\n\n\n<p>\u63a5\u7740\u521b\u5efaSecretService.java\uff0c\u8fd9\u6bb5 <code>SecretService<\/code> \u662f\u4e00\u4e2a<strong>\u540e\u53f0\u5b9a\u4f4d\u670d\u52a1<\/strong>\uff0c\u4f1a\u5728\u540e\u53f0\u5468\u671f\u6027\u83b7\u53d6\u5e76\u663e\u793a\u5f53\u524d\u4f4d\u7f6e\uff0c\u4e3b\u8981\u901a\u8fc7 Android \u7684 <code>LocationManager<\/code> \u6765\u83b7\u53d6 GPS \u6570\u636e\uff0c\u5e76\u6bcf\u9694 3 \u79d2\u7528 Toast \u548c\u65e5\u5fd7\u8f93\u51fa\u4e00\u6b21\u4f4d\u7f6e\u4fe1\u606f\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.smali.secretchallenge;\n\nimport android.Manifest;\nimport android.app.Service;\nimport android.content.Intent;\nimport android.content.pm.PackageManager;\nimport android.location.Location;\nimport android.location.LocationListener;\nimport android.location.LocationManager;\nimport android.os.Bundle;\nimport android.os.Handler;\nimport android.os.IBinder;\nimport android.os.Looper;\nimport android.util.Log;\nimport android.widget.Toast;\n\nimport androidx.core.app.ActivityCompat;\n\npublic class SecretService extends Service {\n    private static final String TAG = \"SecretService\";\n    private LocationManager locationManager;\n    private Handler handler;\n    private Runnable locationRunnable;\n    private Location currentLocation;\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n        Log.d(TAG, \"SecretService created\");\n        \n        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);\n        handler = new Handler(Looper.getMainLooper());\n        \n        \/\/ Create runnable to show location toast every 3 seconds\n        locationRunnable = new Runnable() {\n            @Override\n            public void run() {\n                showLocationToast();\n                handler.postDelayed(this, 3000); \/\/ Repeat every 3 seconds\n            }\n        };\n    }\n\n    @Override\n    public int onStartCommand(Intent intent, int flags, int startId) {\n        Log.d(TAG, \"SecretService started\");\n        \n        \/\/ Start location updates\n        startLocationUpdates();\n        \n        \/\/ Start the periodic toast display\n        handler.post(locationRunnable);\n        \n        return START_STICKY; \/\/ Restart service if killed\n    }\n\n    private void startLocationUpdates() {\n        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &amp;&amp;\n            ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {\n            Log.e(TAG, \"Location permission not granted\");\n            return;\n        }\n\n        LocationListener locationListener = new LocationListener() {\n            @Override\n            public void onLocationChanged(Location location) {\n                currentLocation = location;\n                Log.d(TAG, \"Location updated: \" + location.getLatitude() + \", \" + location.getLongitude());\n            }\n\n            @Override\n            public void onStatusChanged(String provider, int status, Bundle extras) {}\n\n            @Override\n            public void onProviderEnabled(String provider) {}\n\n            @Override\n            public void onProviderDisabled(String provider) {}\n        };\n\n        \/\/ Request location updates from GPS provider\n        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);\n        \n        \/\/ Also try to get last known location\n        Location lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);\n        if (lastKnownLocation != null) {\n            currentLocation = lastKnownLocation;\n        }\n    }\n\n    private void showLocationToast() {\n        if (currentLocation != null) {\n            String message = \"Latitude: \" + currentLocation.getLatitude() + \n                           \", Longitude: \" + currentLocation.getLongitude();\n            Toast.makeText(this, message, Toast.LENGTH_SHORT).show();\n            Log.d(TAG, \"Showing toast: \" + message);\n        } else {\n            Toast.makeText(this, \"Location not available\", Toast.LENGTH_SHORT).show();\n            Log.d(TAG, \"Location not available\");\n        }\n    }\n\n    @Override\n    public void onDestroy() {\n        super.onDestroy();\n        Log.d(TAG, \"SecretService destroyed\");\n        \n        \/\/ Remove callbacks\n        if (handler != null &amp;&amp; locationRunnable != null) {\n            handler.removeCallbacks(locationRunnable);\n        }\n    }\n\n    @Override\n    public IBinder onBind(Intent intent) {\n        return null;\n    }\n} <\/code><\/pre>\n\n\n\n<p>\u6700\u540e\u662fMainActivity.java\uff0c\u52a8\u6001\u7533\u8bf7\u5b9a\u4f4d\u6743\u9650\uff0c\u5e76\u5728\u6743\u9650\u901a\u8fc7\u540e\u542f\u52a8 <code>SecretService<\/code> \u540e\u53f0\u670d\u52a1\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.smali.secretchallenge;\n\nimport android.Manifest;\nimport android.content.Intent;\nimport android.content.pm.PackageManager;\nimport android.os.Bundle;\nimport android.util.Log;\nimport android.widget.TextView;\nimport android.widget.Toast;\n\nimport androidx.activity.EdgeToEdge;\nimport androidx.activity.result.ActivityResultLauncher;\nimport androidx.activity.result.contract.ActivityResultContracts;\nimport androidx.appcompat.app.AppCompatActivity;\nimport androidx.core.app.ActivityCompat;\nimport androidx.core.content.ContextCompat;\nimport androidx.core.graphics.Insets;\nimport androidx.core.view.ViewCompat;\nimport androidx.core.view.WindowInsetsCompat;\n\npublic class MainActivity extends AppCompatActivity {\n    private static final String TAG = \"MainActivity\";\n    private static final int LOCATION_PERMISSION_REQUEST_CODE = 1001;\n\n    private ActivityResultLauncher&lt;String&#91;]&gt; locationPermissionRequest;\n    private TextView statusText;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        EdgeToEdge.enable(this);\n        setContentView(R.layout.activity_main);\n        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -&gt; {\n            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());\n            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);\n            return insets;\n        });\n\n        statusText = findViewById(R.id.statusText);\n\n        \/\/ Initialize permission launcher\n        locationPermissionRequest = registerForActivityResult(\n            new ActivityResultContracts.RequestMultiplePermissions(),\n            result -&gt; {\n                Boolean fineLocationGranted = result.getOrDefault(\n                    Manifest.permission.ACCESS_FINE_LOCATION, false);\n                Boolean coarseLocationGranted = result.getOrDefault(\n                    Manifest.permission.ACCESS_COARSE_LOCATION, false);\n                \n                if (fineLocationGranted != null &amp;&amp; fineLocationGranted) {\n                    Log.d(TAG, \"Fine location permission granted\");\n                    statusText.setText(\"Status: Fine location permission granted\");\n                    startSecretService();\n                } else if (coarseLocationGranted != null &amp;&amp; coarseLocationGranted) {\n                    Log.d(TAG, \"Coarse location permission granted\");\n                    statusText.setText(\"Status: Coarse location permission granted\");\n                    startSecretService();\n                } else {\n                    Log.d(TAG, \"Location permission denied\");\n                    statusText.setText(\"Status: Location permission denied\");\n                    Toast.makeText(this, \"Location permission is required for this app\", Toast.LENGTH_LONG).show();\n                }\n            }\n        );\n\n        \/\/ Request location permissions\n        requestLocationPermissions();\n    }\n\n    private void requestLocationPermissions() {\n        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED ||\n            ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {\n            Log.d(TAG, \"Location permission already granted\");\n            statusText.setText(\"Status: Location permission already granted\");\n            startSecretService();\n        } else {\n            Log.d(TAG, \"Requesting location permissions\");\n            statusText.setText(\"Status: Requesting location permissions...\");\n            locationPermissionRequest.launch(new String&#91;]{\n                Manifest.permission.ACCESS_FINE_LOCATION,\n                Manifest.permission.ACCESS_COARSE_LOCATION\n            });\n        }\n    }\n\n    private void startSecretService() {\n        Log.d(TAG, \"Starting SecretService\");\n        Intent serviceIntent = new Intent(this, SecretService.class);\n        startService(serviceIntent);\n        Toast.makeText(this, \"SecretService started\", Toast.LENGTH_SHORT).show();\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u6700\u540e\u7684\u6548\u679c\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-175401-22-9.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-175401-22-9.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-175805-22-10.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-175805-22-10.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Task 2.Change UI in the thread<\/h3>\n\n\n\n<p><strong>\u4efb\u52a1\u8981\u6c42\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8981\u521b\u5efa\u2f00\u4e2a\u5bf9\u8bdd\u6846\uff0c\u5f53\u6309\u94ae\u88ab\u70b9\u51fb\u65f6\uff0c\u663e\u2f70\u4f60\u521a\u521a\u5728\u2f42\u672c\u4e2d\u8f93\u2f0a\u7684\u5185\u5bb9\u3002<\/li>\n\n\n\n<li>\u5728\u8fd9\u4e2a\u4efb\u52a1\u4e2d\uff0c\u4f60\u9700\u8981\u5728\u2f00\u4e2a\u7ebf\u7a0b\u4e2d\u66f4\u6539 UI\u3002\u5b9e\u9645\u4e0a\uff0c\u6211\u4eec\u4e0d\u5141\u8bb8\u5728\u53e6\u2f00\u4e2a\u7ebf\u7a0b\u4e2d\u66f4\u6539 UI\u3002\u6211\u4eec\u53ea\u80fd\u5728\u4e3b\u7ebf\u7a0b\u4e2d\u66f4\u6539\u5b83\u3002\u6240\u4ee5\u4f60\u9700\u8981\u60f3\u529e\u6cd5\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u7531\u4e8e\u6211\u4eec\u4e0d\u80fd\u76f4\u63a5\u5728\u5b50\u7ebf\u7a0b\u4e2d\u66f4\u65b0 UI\uff08\u5426\u5219\u4f1a\u5d29\u6e83\uff09\uff0c\u6240\u4ee5\u5fc5\u987b\u4f7f\u7528 Android \u7684\u5f02\u6b65\u6d88\u606f\u4f20\u9012\u673a\u5236\uff08Looper + Message + Handler\uff09\u5b9e\u73b0\u5b50\u7ebf\u7a0b\u4e0e\u4e3b\u7ebf\u7a0b\u4e4b\u95f4\u7684\u901a\u4fe1\uff0c\u8fd9\u91cc\u5b9e\u73b0\u7684\u51e0\u4e2a\u5173\u952e\u70b9\u5982\u4e0b\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4f7f\u7528\u5b50\u7ebf\u7a0b\uff1a<code>new Thread(() -&gt; { ... }).start();<\/code><\/li>\n\n\n\n<li>\u4f7f\u7528 <code>Handler<\/code> \u901a\u77e5\u4e3b\u7ebf\u7a0b\uff1a<code>mainHandler.sendMessage(message);<\/code><\/li>\n\n\n\n<li><code>Message<\/code> \u643a\u5e26\u6570\u636e\uff1a<code>message.setData(bundle);<\/code><\/li>\n\n\n\n<li>\u4e3b\u7ebf\u7a0b\u54cd\u5e94\u6d88\u606f\u5e76\u66f4\u65b0 UI\uff1a<code>Handler.handleMessage()<\/code> \u4e2d <code>showDialog(dialogMessage)<\/code><\/li>\n<\/ul>\n\n\n\n<p>\u9996\u5148\u521d\u59cb\u5316 Handler\uff08\u5173\u8054\u4e3b\u7ebf\u7a0b\uff09\uff0c<code>Looper.getMainLooper()<\/code>\u7528\u4e8e\u8ba9\u8fd9\u4e2a Handler \u4e0e\u4e3b\u7ebf\u7a0b\u7ed1\u5b9a\uff1b<code>handleMessage()<\/code>\u4fdd\u8bc1\u5f53\u5176\u4ed6\u7ebf\u7a0b\u53d1\u9001\u6d88\u606f\u65f6\uff0c\u8fd9\u91cc\u5c31\u4f1a\u5728\u4e3b\u7ebf\u7a0b\u6267\u884c\uff1b<code>showDialog()<\/code>\u7528\u4e8e\u5f39\u51fa\u5bf9\u8bdd\u6846\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mainHandler = new Handler(Looper.getMainLooper()) {\n    @Override\n    public void handleMessage(Message msg) {\n        if (msg.what == MSG_SHOW_DIALOG) {\n            String dialogMessage = msg.getData().getString(KEY_DIALOG_MESSAGE);\n            showDialog(dialogMessage);\n        }\n    }\n};<\/code><\/pre>\n\n\n\n<p>\u70b9\u51fb\u6309\u94ae\u540e\u8bfb\u53d6\u7528\u6237\u8f93\u5165\uff0c\u5f00\u542f\u4e00\u4e2a\u540e\u53f0\u7ebf\u7a0b\u5904\u7406\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>showDialogButton.setOnClickListener(v -&gt; {\n    String userInput = inputText.getText().toString().trim();\n    if (userInput.isEmpty()) {\n        Toast.makeText(this, \"\u8bf7\u8f93\u5165\u6587\u672c\", Toast.LENGTH_SHORT).show();\n        return;\n    }\n    startBackgroundThread(userInput);\n});<\/code><\/pre>\n\n\n\n<p>\u5b50\u7ebf\u7a0b\u6a21\u62df\u5f02\u6b65\u5de5\u4f5c\u5e76\u53d1\u9001 Message\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private void startBackgroundThread(String userInput) {\n    new Thread(() -&gt; {\n        try {\n            Thread.sleep(1000); \/\/ \u6a21\u62df\u8017\u65f6\u64cd\u4f5c\n\n            \/\/ \u6784\u9020\u5e76\u53d1\u9001\u6d88\u606f\u5230\u4e3b\u7ebf\u7a0b\n            Message message = mainHandler.obtainMessage(MSG_SHOW_DIALOG);\n            Bundle bundle = new Bundle();\n            bundle.putString(KEY_DIALOG_MESSAGE, userInput);\n            message.setData(bundle);\n            mainHandler.sendMessage(message);\n\n        } catch (InterruptedException e) {\n            Log.e(TAG, \"Background thread interrupted\", e);\n        }\n    }).start();\n}<\/code><\/pre>\n\n\n\n<p>\u6700\u540e\u4e3b\u7ebf\u7a0b\u6536\u5230\u6d88\u606f\u540e\u5f39\u51fa\u5bf9\u8bdd\u6846\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private void showDialog(String message) {\n    new AlertDialog.Builder(this)\n        .setTitle(\"\u540e\u53f0\u7ebf\u7a0b\u6d88\u606f\")\n        .setMessage(\"\u4f60\u8f93\u5165\u7684\u5185\u5bb9: \" + message)\n        .setPositiveButton(\"\u786e\u5b9a\", null)\n        .show();\n}<\/code><\/pre>\n\n\n\n<p>\u73b0\u5728\u7684MainActivity.java\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.smali.secretchallenge;<br><br>import android.Manifest;<br>import android.app.AlertDialog;<br>import android.content.Intent;<br>import android.content.pm.PackageManager;<br>import android.os.Bundle;<br>import android.os.Handler;<br>import android.os.Looper;<br>import android.os.Message;<br>import android.util.Log;<br>import android.widget.Button;<br>import android.widget.EditText;<br>import android.widget.TextView;<br>import android.widget.Toast;<br><br>import androidx.activity.result.ActivityResultLauncher;<br>import androidx.activity.result.contract.ActivityResultContracts;<br>import androidx.appcompat.app.AppCompatActivity;<br>import androidx.core.content.ContextCompat;<br><br>public class MainActivity extends AppCompatActivity {<br>    private static final String TAG = \"MainActivity\";<br>    <br>    \/\/ Task 2: Handler constants<br>    private static final int MSG_SHOW_DIALOG = 1;<br>    private static final String KEY_DIALOG_MESSAGE = \"dialog_message\";<br><br>    private ActivityResultLauncher&lt;String&#91;]&gt; locationPermissionRequest;<br>    private TextView statusText;<br>    private EditText inputText;<br>    private Button showDialogButton;<br>    <br>    \/\/ Task 2: Handler for UI thread communication<br>    private Handler mainHandler;<br><br>    @Override<br>    protected void onCreate(Bundle savedInstanceState) {<br>        super.onCreate(savedInstanceState);<br>        setContentView(R.layout.activity_main);<br><br>        \/\/ Initialize UI elements<br>        statusText = findViewById(R.id.statusText);<br>        inputText = findViewById(R.id.inputText);<br>        showDialogButton = findViewById(R.id.showDialogButton);<br><br>        \/\/ Task 2: Initialize Handler with main thread Looper<br>        mainHandler = new Handler(Looper.getMainLooper()) {<br>            @Override<br>            public void handleMessage(Message msg) {<br>                if (msg.what == MSG_SHOW_DIALOG) {<br>                    String dialogMessage = msg.getData().getString(KEY_DIALOG_MESSAGE);<br>                    showDialog(dialogMessage);<br>                }<br>            }<br>        };<br><br>        \/\/ Task 2: Set button click listener<br>        showDialogButton.setOnClickListener(v -&gt; {<br>            String userInput = inputText.getText().toString().trim();<br>            if (userInput.isEmpty()) {<br>                Toast.makeText(this, \"\u8bf7\u8f93\u5165\u6587\u672c\", Toast.LENGTH_SHORT).show();<br>                return;<br>            }<br>            <br>            \/\/ Start background thread<br>            startBackgroundThread(userInput);<br>        });<br><br>        \/\/ Initialize permission launcher<br>        locationPermissionRequest = registerForActivityResult(<br>            new ActivityResultContracts.RequestMultiplePermissions(),<br>            result -&gt; {<br>                Boolean fineLocationGranted = result.getOrDefault(<br>                    Manifest.permission.ACCESS_FINE_LOCATION, false);<br>                Boolean coarseLocationGranted = result.getOrDefault(<br>                    Manifest.permission.ACCESS_COARSE_LOCATION, false);<br>                <br>                if (fineLocationGranted != null &amp;&amp; fineLocationGranted) {<br>                    Log.d(TAG, \"Fine location permission granted\");<br>                    statusText.setText(\"Status: Fine location permission granted\");<br>                    startSecretService();<br>                } else if (coarseLocationGranted != null &amp;&amp; coarseLocationGranted) {<br>                    Log.d(TAG, \"Coarse location permission granted\");<br>                    statusText.setText(\"Status: Coarse location permission granted\");<br>                    startSecretService();<br>                } else {<br>                    Log.d(TAG, \"Location permission denied\");<br>                    statusText.setText(\"Status: Location permission denied\");<br>                    Toast.makeText(this, \"Location permission is required for this app\", Toast.LENGTH_LONG).show();<br>                }<br>            }<br>        );<br><br>        \/\/ Request location permissions<br>        requestLocationPermissions();<br>    }<br><br>    \/\/ Task 2: Start background thread<br>    private void startBackgroundThread(String userInput) {<br>        new Thread(() -&gt; {<br>            try {<br>                \/\/ Simulate background work<br>                Thread.sleep(1000);<br>                <br>                \/\/ Send message to main thread to show dialog<br>                Message message = mainHandler.obtainMessage(MSG_SHOW_DIALOG);<br>                Bundle bundle = new Bundle();<br>                bundle.putString(KEY_DIALOG_MESSAGE, userInput);<br>                message.setData(bundle);<br>                mainHandler.sendMessage(message);<br>                <br>            } catch (InterruptedException e) {<br>                Log.e(TAG, \"Background thread interrupted\", e);<br>            }<br>        }).start();<br>    }<br><br>    \/\/ Task 2: Show dialog from main thread<br>    private void showDialog(String message) {<br>        new AlertDialog.Builder(this)<br>            .setTitle(\"\u540e\u53f0\u7ebf\u7a0b\u6d88\u606f\")<br>            .setMessage(\"\u4f60\u8f93\u5165\u7684\u5185\u5bb9: \" + message)<br>            .setPositiveButton(\"\u786e\u5b9a\", null)<br>            .show();<br>    }<br><br>    private void requestLocationPermissions() {<br>        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED ||<br>            ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {<br>            Log.d(TAG, \"Location permission already granted\");<br>            statusText.setText(\"Status: Location permission already granted\");<br>            startSecretService();<br>        } else {<br>            Log.d(TAG, \"Requesting location permissions\");<br>            statusText.setText(\"Status: Requesting location permissions...\");<br>            locationPermissionRequest.launch(new String&#91;]{<br>                Manifest.permission.ACCESS_FINE_LOCATION,<br>                Manifest.permission.ACCESS_COARSE_LOCATION<br>            });<br>        }<br>    }<br><br>    private void startSecretService() {<br>        Log.d(TAG, \"Starting SecretService\");<br>        Intent serviceIntent = new Intent(this, SecretService.class);<br>        startService(serviceIntent);<br>        Toast.makeText(this, \"SecretService started\", Toast.LENGTH_SHORT).show();<br>    }<br>}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-205608-22-11.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-205608-22-11.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Task 3. How to call that method?<\/h3>\n\n\n\n<p><strong>\u4efb\u52a1\u8981\u6c42\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u83b7\u53d6 classes.jar \u7684 PoRELab \u7c7b\u4e2d\u540d\u4e3a curStr \u7684\u79c1\u6709\u5b57\u6bb5\u7684\u503c<\/li>\n\n\n\n<li>\u8c03\u2f64 classes.jar \u7684 PoRELab \u7c7b\u4e2d\u540d\u4e3a privateMethod \u7684\u79c1\u6709\u2f45\u6cd5<\/li>\n<\/ul>\n\n\n\n<p>\u5728app\u76ee\u5f55\u4e0b\u521b\u5efa\u4e00\u4e2alib\uff0c\u628a\u8fd9\u4e2ajar\u653e\u8fdb\u53bb\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-22060-22-12.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-22060-22-12.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" style=\"width:460px;height:auto\"\/><\/div><\/figure>\n\n\n\n<p>\u8fd9\u662f\u8fd9\u4e2ajar\u7684\u5177\u4f53\u5185\u5bb9\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-220732-22-13.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-220732-22-13.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>\u4e3b\u8981\u662f\u5728MainActivity.java\u52a0\u4e00\u70b9\u53cd\u5c04\u8c03\u7528\u7684\u5185\u5bb9\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private void demonstrateReflection() {\n        try {\n            Log.d(TAG, \"=== Task 3: Java Reflection Demo ===\");\n            \n            \/\/ Get the PoRELab class from jar file\n            Class&lt;?&gt; poRELabClass = Class.forName(\"com.pore.mylibrary.PoRELab\");\n            Log.d(TAG, \"Successfully loaded PoRELab class from jar\");\n            \n            \/\/ Get private static field 'curStr' using reflection\n            Field curStrField = poRELabClass.getDeclaredField(\"curStr\");\n            curStrField.setAccessible(true); \/\/ Make private field accessible\n            String fieldValue = (String) curStrField.get(null); \/\/ null for static field\n            Log.d(TAG, \"Private static field 'curStr' value: \" + fieldValue);\n            \n            \/\/ Invoke private static method 'privateMethod' using reflection\n            Method privateMethod = poRELabClass.getDeclaredMethod(\"privateMethod\", String.class, String.class);\n            privateMethod.setAccessible(true); \/\/ Make private method accessible\n            privateMethod.invoke(null, \"Hello from reflection!\", \"Secret message\"); \/\/ null for static method\n            Log.d(TAG, \"Private static method 'privateMethod' invoked successfully\");\n            \n            Log.d(TAG, \"=== Java Reflection Demo Completed ===\");\n            \n        } catch (ClassNotFoundException e) {\n            Log.e(TAG, \"PoRELab class not found: \" + e.getMessage(), e);\n        } catch (NoSuchFieldException e) {\n            Log.e(TAG, \"Field 'curStr' not found: \" + e.getMessage(), e);\n        } catch (NoSuchMethodException e) {\n            Log.e(TAG, \"Method 'privateMethod' not found: \" + e.getMessage(), e);\n        } catch (Exception e) {\n            Log.e(TAG, \"Reflection error: \" + e.getMessage(), e);\n        }\n    }<\/code><\/pre>\n\n\n\n<p>\u7136\u540e\u5728build.gradle.kts\u91cc\u5f15\u5165\u8fd9\u4e2ajar\u4f9d\u8d56\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace = \"com.smali.secretchallenge\"\n    compileSdk = 35\n\n    defaultConfig {\n        applicationId = \"com.smali.secretchallenge\"\n        minSdk = 24\n        targetSdk = 35\n        versionCode = 1\n        versionName = \"1.0\"\n\n        testInstrumentationRunner = \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n\n    buildTypes {\n        release {\n            isMinifyEnabled = false\n            proguardFiles(\n                getDefaultProguardFile(\"proguard-android-optimize.txt\"),\n                \"proguard-rules.pro\"\n            )\n        }\n    }\n    compileOptions {\n        sourceCompatibility = JavaVersion.VERSION_11\n        targetCompatibility = JavaVersion.VERSION_11\n    }\n}\n\ndependencies {\n\n    implementation(libs.appcompat)\n    implementation(libs.material)\n    implementation(libs.activity)\n    implementation(libs.constraintlayout)\n    \n    \/\/ Task 3: Add jar file dependency\n    implementation(files(\"libs\/Step1_Task3_classes.jar\"))\n    \n    testImplementation(libs.junit)\n    androidTestImplementation(libs.ext.junit)\n    androidTestImplementation(libs.espresso.core)\n}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-221122-22-14.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-221122-22-14.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Task 4. Generate Signed Application<\/h3>\n\n\n\n<p><strong>\u4efb\u52a1\u8981\u6c42\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u987e\u540d\u601d\u4e49\uff0c\u521b\u5efa\u4e00\u4e2a\u7b7e\u597d\u540d\u7684apk<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-221358-22-15.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-221358-22-15.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-221432-22-16.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-221432-22-16.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" style=\"width:652px;height:auto\"\/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-221607-22-17.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-221607-22-17.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" style=\"width:697px;height:auto\"\/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-221701-22-18.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-221701-22-18.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" style=\"width:663px;height:auto\"\/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-221712-22-19.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-221712-22-19.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" style=\"width:648px;height:auto\"\/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-221755-22-21.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-221755-22-21.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" style=\"width:707px;height:auto\"\/><\/div><\/figure>\n\n\n\n<p>\u6700\u540e\u751f\u6210\u6210\u529f\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-222233-22-22.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250622-222233-22-22.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2. Smali2Java<\/h2>\n\n\n\n<p>\u9996\u5148\u4f7f\u7528smali.jar\u5c06 smali \u6587\u4ef6\u7f16\u8bd1\u4e3a dex \u6587\u4ef6<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>java -jar smali.jar assemble  src.smali -o src.dex<\/code><\/pre>\n\n\n\n<p>smali.jar \u4e0b\u8f7d\u5730\u5740\uff1a<a href=\"https:\/\/github.com\/baksmali\/smali\/releases\/download\/v2.2.2\/smali-2.2.2.jar\">https:\/\/github.com\/baksmali\/smali\/releases\/download\/v2.2.2\/smali-2.2.2.jar<\/a>\uff0c\u6216\u8005\u5176\u5b9eAndroid Studio\u9ed8\u8ba4\u5c31\u5b89\u88c5\u4e86\u8fd9\u4e2a\u4e1c\u897f\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-203803-24-2.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-203803-24-2.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>D:\\Android\\Android Studio\\plugins\\smali\\lib\\Step2_smali_code_files\\smali&gt;java -jar smali-2.2.2.jar assemble -o output.dex .<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-210733-24-5.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-210733-24-5.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>\u7136\u540e\u4f7f\u7528adb\u8fde\u63a5\u6211\u4eec\u7684\u5b89\u5353\u865a\u62df\u673a\uff0c\u8fd9\u4e2aadb\u662f\u76f4\u63a5Android studio\u9ed8\u8ba4\u5b89\u88c5\u7684\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-203422-24-1.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-203422-24-1.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>\u7136\u540e\u628a\u6211\u4eec\u7684dex\u6587\u4ef6\u4f20\u4e0a\u53bb\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>D:\\Android\\SDK\\platform-tools&gt;adb push output.dex \/tmp\noutput.dex: 1 file pushed, 0 skipped. 13.1 MB\/s (4876 bytes in 0.000s)\n\nD:\\Android\\SDK\\platform-tools&gt;adb shell\nemu64xa:\/ $ cd \/tmp\nemu64xa:\/tmp $ ls -a\n.  ..  CheckBox.dex  Checker.dex  Encoder.dex  output.dex<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-210829-24-6.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-210829-24-6.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>CheckBox.java\u7684\u903b\u8f91\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package JDBC.lab;\n\nimport java.util.Scanner;\n\npublic class CheckBox {\n    private String rawInfo;\n    Encoder encoder = new Encoder();\n    Checker checker = new Checker();\n\n    public boolean checkEncP(String str) {\n        return this.encoder.check(this.rawInfo, str);\n    }\n\n    public String getEncP() {\n        return this.encoder.encoding(this.rawInfo);\n    }\n\n    private boolean checkInput(String str) {\n        return this.checker.check(str);\n    }\n\n    public static void main(String&#91;] strArr) {\n        String str;\n        CheckBox checkBox = new CheckBox();\n        System.out.print(\"input: \");\n        String nextLine = new Scanner(System.in).nextLine();\n        checkBox.rawInfo = nextLine;\n        if (strArr.length == 0 &amp;&amp; nextLine.length() == 11) {\n            str = \"Task 2: (Encoded msg) \" + checkBox.getEncP();\n        } else if (strArr.length != 1) {\n            str = \"Task 1: \" + checkBox.checkInput(nextLine);\n        } else {\n            str = \"Task 2: \" + checkBox.checkEncP(strArr&#91;0]);\n        }\n        System.out.println(str);\n    }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Task 1. Checker<\/h3>\n\n\n\n<p><strong>\u4efb\u52a1\u8981\u6c42\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7f16\u8bd1\u5e76\u8fd0\u2f8f\u7ed9\u51fa\u7684 smali \u4ee3\u7801\uff0c\u5b9e\u73b0\u8f93\u2f0a\u2f00\u4e2a\u5b57\u7b26\u4e32\uff0cCheckBox \u5c06\u68c0\u67e5\u8be5\u5b57\u7b26\u4e32\u662f\u5426\u901a\u8fc7 Checker \u7c7b\u4e2d\u7684\u68c0\u67e5\uff0c\u5e76\u76f8\u5e94\u5730\u8f93\u51fa true\/false<\/li>\n\n\n\n<li>\u7f16\u5199Java\u4ee3\u7801\u5b9e\u73b0Checker.java\u4e2d\u529f\u80fd\uff0c\u5b8c\u6210 Java \u4ee3\u7801\u540e\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u8fd0\u2f8f CheckBox.java \u4e2d\u7684 Main \u2f45\u6cd5\u5e76\u5c06 Java \u4e2d\u7684\u8f93\u51fa\u4e0e smali \u4e2d\u7684\u8f93\u51fa\u8fdb\u2f8f\u2f50\u8f83\u6765\u68c0\u67e5\u4ee3\u7801\u662f\u5426\u6b63\u786e\u8fd0\u2f8f<\/li>\n<\/ul>\n\n\n\n<p>\u6309\u7167smali\u4ee3\u7801\u63a8\u65ad\uff0c\u7b26\u5408\u8981\u6c42\u7684\u5b57\u7b26\u4e32\u8981\u6c42\u5982\u4e0b\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u957f\u5ea6&nbsp;12~16<\/li>\n\n\n\n<li>\u524d10\u4f4d&nbsp;substring(0, 10)\uff0c\u7edf\u8ba1\u5b57\u7b26&nbsp;&#8216;1&#8217; \u7684\u4e2a\u6570\uff0c\u5fc5\u987b\u7b49\u4e8e3<\/li>\n\n\n\n<li>checkStr1(substring(0, 10))&nbsp;\u5fc5\u987b\u4e3a true   \u524d10\u4f4d\u6709\u4e24\u4e2a&nbsp;&#8216;x&#8217;\uff0c\u4e14\u5b83\u4eec\u95f4\u96944\u4f4d  \u7b2c\u4e00\u4e2a\u5b57\u7b26\u662f&nbsp;&#8216;0&#8217;  \u6700\u540e\u4e00\u4e2a\u5b57\u7b26\u662f&nbsp;&#8216;9&#8217;<\/li>\n\n\n\n<li>\u7b2c\u4e00\u4e2a&nbsp;&#8216;x&#8217; \u4e4b\u524d\u7684\u5b57\u7b26\u4e32\u5305\u542b &#8220;key&#8221;<\/li>\n\n\n\n<li>int num = Integer.parseInt(s.substring(10, s.length() &#8211; 1));  \u8fd9\u90e8\u5206\u5fc5\u987b\u80fd\u8f6c\u6210\u6574\u6570<\/li>\n\n\n\n<li>func(count)&nbsp;== num  \u5176\u4e2d&nbsp;count&nbsp;\u662f\u524d10\u4f4d&nbsp;&#8216;1&#8217; \u7684\u4e2a\u6570\uff08\u53733\uff09\uff0cfunc(3)=6<\/li>\n<\/ul>\n\n\n\n<p>\u4e00\u4e2a\u7b26\u5408\u8981\u6c42\u7684\u5b57\u7b26\u4e32\u4e3a\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0keyx111x961<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-215626-24-9.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-215626-24-9.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" style=\"width:602px;height:auto\"\/><\/div><\/figure>\n\n\n\n<p>\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package JDBC.lab;\n\npublic class Checker {\n    private String secret = \"key\";\n\n    private boolean checkStr1(String str) {\n        char&#91;] charArray = str.toCharArray();\n        int i = 0;\n        int i2 = 0;\n        int i3 = 0;\n        for (int i4 = 0; i4 &lt; charArray.length; i4++) {\n            if (charArray&#91;i4] == 'x') {\n                i++;\n                if (i == 1) {\n                    i3 = i4;\n                }\n                if (i == 2) {\n                    i2 = i4;\n                }\n            }\n        }\n        return i == 2 &amp;&amp; i2 - i3 == 4 &amp;&amp; charArray&#91;0] == '0' &amp;&amp; charArray&#91;charArray.length + (-1)] == '9' &amp;&amp; str.substring(0, i3).contains(this.secret);\n    }\n\n    private int func(int i) {\n        if (i &lt;= 1) {\n            return 1;\n        }\n        return func(i - 1) * i;\n    }\n\n    private int count(String str) {\n        int i = 0;\n        char&#91;] charArray = str.toCharArray();\n        int i2 = 0;\n        while (true) {\n            int i3 = i;\n            if (i2 &lt; str.length()) {\n                i = charArray&#91;i2] == '1' ? i3 + 1 : i3;\n                i2++;\n            } else {\n                return i3;\n            }\n        }\n    }\n\n    public boolean check(String str) {\n        if (str.length() &lt; 12 || str.length() &gt; 16) {\n            return false;\n        }\n        String substring = str.substring(0, 10);\n        int count = count(str.substring(10, str.length()));\n        return func(count) == count &amp;&amp; checkStr1(substring);\n    }\n}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-220722-24-10.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-220722-24-10.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Task 2. Encoder<\/h3>\n\n\n\n<p><strong>\u4efb\u52a1\u8981\u6c42\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6309\u7167Task1\u7684\u2f45\u5f0f\u7f16\u8bd1\u5e76\u8fd0\u2f8fsmali\u4ee3\u7801\uff0c\u8f93\u2f0a\u4f60\u7684\u5b66\u53f7\uff0cCheckBox\u4f1a\u8f93\u51fa\u7f16\u7801\u540e\u7684\u6d88\u606f\uff0c\u4f7f\u2f64 1.1 \u4e2d\u7f16\u7801\u7684\u6d88\u606f\u4f5c\u4e3a CheckBox \u7684\u53c2\u6570\u5e76\u8f93\u2f0a\u60a8\u7684\u5b66\u2f63 ID\uff0cCheckBox \u5c06\u68c0\u67e5\u6d88\u606f\u662f\u5426\u901a\u8fc7Encoder \u7c7b\u4e2d\u7684\u68c0\u67e5\u5e76\u76f8\u5e94\u5730\u8f93\u51fa true\/false\u3002<\/li>\n\n\n\n<li>\u7f16\u5199Java\u4ee3\u7801\u5b9e\u73b0Encoder.java\u4e2d\u529f\u80fd\uff0c\u5b8c\u6210 Java \u4ee3\u7801\u540e\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7\u8fd0\u2f8f CheckBox.java \u4e2d\u7684 Main \u2f45\u6cd5\u5e76\u5c06 Java \u4e2d\u7684\u8f93\u51fa\u4e0e smali \u4e2d\u7684\u8f93\u51fa\u8fdb\u2f8f\u2f50\u8f83\u6765\u68c0\u67e5\u4ee3\u7801\u662f\u5426\u6b63\u786e\u8fd0\u2f8f\u3002<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-211548-24-8.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-211548-24-8.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>emu64xa:\/tmp $ dalvikvm -cp output.dex CheckBox\ninput: 18307130154\nTask 2: (Encoded msg) 71921970cc1381400f40760011501bc06218214a1980131a\nemu64xa:\/tmp $ dalvikvm -cp output.dex CheckBox 71921970cc1381400f40760011501bc06218214a1980131a\ninput: 18307130154\nTask 2: true<\/code><\/pre>\n\n\n\n<p>\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package JDBC.lab;\n\nimport java.security.MessageDigest;\nimport java.util.Random;\n\npublic class Encoder {\n    private final String&#91;] hexDigits = {\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"};\n    private String algorithm = \"MD5\";\n    private String charSet = \"utf-8\";\n\n    public String encoding(String str) {\n        String result = \"\";\n        String salt = getSalt();\n        String combined = str + salt;\n        try {\n            MessageDigest md = MessageDigest.getInstance(this.algorithm);\n            byte&#91;] digestBytes = md.digest(combined.getBytes(this.charSet));\n            String hex = byteArrayToHexString(digestBytes);\n\n            char&#91;] cArr = new char&#91;48];\n            for (int i = 0; i &lt; 16; i++) {\n                cArr&#91;i * 3] = hex.charAt(i * 2);\n                cArr&#91;i * 3 + 1] = salt.charAt(i);\n                cArr&#91;i * 3 + 2] = hex.charAt(i * 2 + 1);\n            }\n            result = new String(cArr);\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n        return result;\n    }\n\n\n    private String getSalt() {\n        Random random = new Random();\n        StringBuilder sb = new StringBuilder(16);\n        for (int i = 0; i &lt; 16; i++) {\n            if (random.nextBoolean()) {\n                sb.append(\"1\");\n            } else {\n                sb.append(\"0\");\n            }\n        }\n        return sb.toString();\n    }\n\n    private String byteArrayToHexString(byte&#91;] bArr) {\n        StringBuffer stringBuffer = new StringBuffer();\n        for (byte b : bArr) {\n            stringBuffer.append(byteToHexString(b));\n        }\n        return stringBuffer.toString();\n    }\n\n    private String byteToHexString(byte b) {\n        int unsignedByte = b &amp; 0xff;\n        int high = (unsignedByte &gt;&gt; 4) &amp; 0x0f;\n        int low = unsignedByte &amp; 0x0f;\n        return hexDigits&#91;high] + hexDigits&#91;low];\n    }\n\n    public boolean check(String str, String str2) {\n        char&#91;] cArr = new char&#91;32];\n        char&#91;] cArr2 = new char&#91;16];\n        if (str2.length() != 48) {\n            return false;\n        }\n        for (int i = 0; i &lt; 48; i += 3) {\n            cArr&#91;(i \/ 3) * 2] = str2.charAt(i);\n            cArr&#91;((i \/ 3) * 2) + 1] = str2.charAt(i + 2);\n            cArr2&#91;i \/ 3] = str2.charAt(i + 1);\n        }\n        String str3 = str + new String(cArr2);\n        try {\n            return (\"\" + byteArrayToHexString(MessageDigest.getInstance(this.algorithm).digest(str3.getBytes(this.charSet)))).equals(new String(cArr));\n        } catch (Exception e) {\n            e.printStackTrace();\n            return false;\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-220905-24-11.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-220905-24-11.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>\u7136\u540e\u914d\u4e00\u4e0b\u4f20\u5165\u7684\u53c2\u6570\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-221032-24-12.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-221032-24-12.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-221346-24-13.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-221346-24-13.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3. Reversing and Repacking<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Task 1 Knock the door<\/h3>\n\n\n\n<p><strong>\u4efb\u52a1\u8981\u6c42\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5728\u8fd9\u4e2a\u4efb\u52a1\u4e2d\uff0c\u4f60\u4f1a\u5f97\u5230\u4e00\u4e2a\u7b80\u5355\u6d4b\u8bd5\u7684apk\u3002\u53ea\u6709\u901a\u8fc7\u8fd9\u4e2a\u6d4b\u8bd5\uff0c\u4f60\u624d\u80fd\u5b8c\u6210\u8fd9\u4e2a\u4efb\u52a1\u3002\u4e0d\u8fc7\uff0c\u5982\u679c\u4e0d\u4f5c\u5f0a\u7684\u8bdd\uff0c\u5f88\u96be\u901a\u8fc7\u3002<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-224328-23-3.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-224328-23-3.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>\u8fd9\u91cc\u7684\u6309\u952e\u903b\u8f91\u5176\u5b9e\u53ea\u8981\u628al1\u6539\u62100\u5c31\u884c\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public void buttonClick(View view) {\n        int i = this.l0;\n        if (i != this.l1) {\n            int i2 = i + 1;\n            this.l0 = i2;\n            this.t2.setText(String.format(\"%d \/ %d\", Integer.valueOf(i2), Integer.valueOf(this.l1)));\n            return;\n        }\n        this.t2.setText(R.string.success1);\n        this.t3.setText(PlayGame.getFlag(this.te.getText().toString(), this.ctx));\n    }<\/code><\/pre>\n\n\n\n<p>\u4e0b\u8f7d\u5730\u5740\uff1a<a href=\"https:\/\/github.com\/iBotPeaches\/Apktool\/releases\/download\/v2.11.0\/apktool_2.11.0.jar\">https:\/\/github.com\/iBotPeaches\/Apktool\/releases\/download\/v2.11.0\/apktool_2.11.0.jar<\/a><\/p>\n\n\n\n<p>\u8fd9\u91cc\u7528apktool\u89e3\u5305\u4e00\u4e0bapk\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>java -jar apktool_2.11.1.jar d Step3_Task123_lab.apk<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-225302-23-4.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-225302-23-4.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>\u89e3\u5305\u4e4b\u540e\u641c\u4e86\u4e00\u4e0b\uff0c\u76f4\u63a5\u627e\u5230\u8fd9\u4e2al1\u5bf9\u5e94\u7684v0<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-225533-23-5.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-225533-23-5.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" style=\"width:737px;height:auto\"\/><\/div><\/figure>\n\n\n\n<p>\u6539\u62100x0\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-225748-23-6.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-225748-23-6.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" style=\"width:764px;height:auto\"\/><\/div><\/figure>\n\n\n\n<p>\u7136\u540e\u91cd\u65b0\u6253\u5305\u6210apk\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>java -jar apktool_2.11.1.jar b Step3_Task123_lab_new -o Step3_Task123_lab_new.apk<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-233244-23-10.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-233244-23-10.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>\u7b7e\u4e2a\u540d\uff0c\u6211\u8fd9\u91cc\u7528\u7684\u4e4b\u524dandroid Studio\u751f\u6210\u7684\u7b7e\u540d\uff0c\u8fd9\u91cc\u6ce8\u610fjdk\u73af\u5883\u9700\u8981\u548cAndroid studio\u7684\u4e00\u6837\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-231808-23-8.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-231808-23-8.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-232319-23-9.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-232319-23-9.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>java -jar \"D:\\Android\\SDK\\build-tools\\35.0.0\\lib\\apksigner.jar\" sign --ks D:\\Android\\fushuling.jks --ks-key-alias key0 \"D:\\CTF_tools\\AndroidReverse\\AndroidKiller_v1.3.1\\bin\\apktool\\apktool\\Step3_Task123_lab_new.apk\"<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-233648-23-11.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-233648-23-11.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>\u6700\u540e\u968f\u4fbf\u8f93\u5165\u4e00\u4e2a\u4e1c\u897f\u5373\u53ef\u6267\u884c\u6210\u529f\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-000531-23-17.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-000531-23-17.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" style=\"width:405px;height:auto\"\/><\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-233925-23-12.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-233925-23-12.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" style=\"width:405px;height:auto\"\/><\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Task 2 Give me your token<\/h3>\n\n\n\n<p><strong>\u4efb\u52a1\u8981\u6c42\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b8c\u6210 Task1 \u540e\uff0c\u4f60\u9700\u8981\u5728\u8fd9\u4e2a Task3 \u4e2d\u8f93\u2f0a\u6b63\u786e\u7684 token\uff0c\u5e76\u83b7\u5f97\u76f8\u5e94\u7684\u63d0\u2f70\u3002\u663e\u7136\uff0c\u5149\u9760\u4f60\u7684\u60f3\u8c61\u2f12\u662f\u2f46\u6cd5\u5f97\u5230\u6b63\u786e token \u7684<\/li>\n<\/ul>\n\n\n\n<p>\u9690\u85cf\u7684key\u7684\u903b\u8f91\u5728\u8fd9\u91cc\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-234304-23-13.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-234304-23-13.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>sb3.setCharAt(0, (char) ('p' - 4));  \/\/ 'l'\nsb3.setCharAt(1, (char) ('o' - 6));  \/\/ 'i'\nsb3.setCharAt(2, (char) ('r' - 11)); \/\/ 'g'\nsb3.setCharAt(3, (char) ('e' + 3));  \/\/ 'h'\n\/\/sb3 = \"ligh\"<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>sb2.setCharAt(0, (char) ('p' + 4));  \/\/ 't'\nsb2.setCharAt(1, (char) ('o' + 10)); \/\/ 'y'\nsb2.setCharAt(2, (char) ('r' - 13)); \/\/ 'e'\nsb2.setCharAt(3, (char) ('e' + 7));  \/\/ 'l'\n\/\/sb2 = \"tyel\"<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>sb.setCharAt(0, (char) ('p' - 4));  \/\/ 'l'\nsb.setCharAt(1, (char) ('o' + 0));  \/\/ 'o'\nsb.setCharAt(2, (char) ('r' + 5));  \/\/ 'w'\nsb.setCharAt(3, (char) ('e' - 1));  \/\/ 'd'\n\/\/sb = \"lowd\"<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>sb4.setCharAt(0, (char) ('p' + 2));     \/\/ 'r'\nsb4.setCharAt(1, (char) ('o' - 10));    \/\/ 'e'\nsb4.setCharAt(2, (char) ('r' + 1));     \/\/ 's'\nsb4.setCharAt(3, (char) ('e' + 14));    \/\/ 's'\n\/\/sb4 = \"ress\"<\/code><\/pre>\n\n\n\n<p>\u6700\u540e\u62fc\u5728\u4e00\u8d77\uff1alightyellowdress<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-234744-23-14.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-234744-23-14.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Task 3 Call to the NPC<\/h3>\n\n\n\n<p><strong>\u4efb\u52a1\u8981\u6c42\uff1a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b8c\u6210Task2\u540e\uff0c\u4f60\u9700\u8981\u6839\u636eTask2\u4e2d\u5f97\u5230\u7684\u63d0\u2f70\u8fdb\u2f8f\u76f8\u5e94\u7684\u64cd\u4f5c\uff0c\u624d\u80fd\u5f97\u5230\u6700\u7ec8\u7684\u79d8\u5bc6\u7b54\u6848<\/li>\n<\/ul>\n\n\n\n<p>\u63d0\u793a\u8ba9\u6211\u4eec\u8c03\u7528\u67d0\u4e2a\u4e1c\u897f\uff0c\u90a3\u53ef\u80fd\u662f native \u51fd\u6570\u3001\u9690\u85cf\u7684\u65b9\u6cd5\u3001\u67d0\u4e2a JNI \u63a5\u53e3\u6216\u9690\u85cf\u7684\u903b\u8f91\uff0c\u56de\u770b\u8fd9\u91cc\u53ef\u4ee5\u770b\u5230\u6709\u4e2anative\u65b9\u6cd5\uff0c\u90a3\u5c31\u662f\u5f97\u624b\u52a8\u8c03\u7528\u8fd9\u4e2a\u4e1c\u897f\uff0c\u4f20\u5165\u7684\u53c2\u6570\u5fc5\u987b\u662f\u8fd9<code>BuildConfig.FLAVOR.concat(sb3.toString()).concat(sb2.toString()).concat(sb.toString()).concat(sb4.toString())<\/code><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-235323-23-15.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250623-235323-23-15.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>\u624b\u52a8\u52a0\u4e00\u53e5\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> invoke-static {p1}, Lcom\/pore\/play4fun\/PlayGame;-&gt;skdaga(Ljava\/lang\/String;)Ljava\/lang\/String;\n    \n move-result-object p0<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-001843-23-20.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-001843-23-20.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n\n\n\n<p>\u7136\u540e\u6309task1\u91cd\u65b0\u6253\u5305\u5e76\u7b7e\u540d\uff0c\u91cd\u65b0\u5b8c\u6210\u4e00\u6b21task1\u548c2\u5373\u53ef\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>flag{SmaliIsCoolll}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-001553-23-19.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-001553-23-19.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" style=\"width:421px;height:auto\"\/><\/div><\/figure>\n\n\n\n<p>\u53cd\u7f16\u8bd1\u51fa\u7684\u7ed3\u679c\u5982\u4e0b\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-002122-23-21.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  decoding=\"async\" data-original=\"https:\/\/fushuling-1309926051.cos.ap-shanghai.myqcloud.com\/2025%2F06%2FQQ20250624-002122-23-21.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\"\/><\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\u5b89\u5353\u57fa\u7840\u77e5\u8bc6 \u5b89\u5353\u7cfb\u7edf\u67b6\u6784 Android \u662f\u4e00\u4e2a\u7531 Google \u4e3b\u5bfc\u5f00\u53d1\u7684 \u57fa\u4e8e Linux \u5185\u6838\u7684\u5f00\u6e90\u64cd [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[],"class_list":["post-3818","post","type-post","status-publish","format-standard","hentry","category-lab"],"_links":{"self":[{"href":"https:\/\/fushuling.com\/index.php\/wp-json\/wp\/v2\/posts\/3818","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fushuling.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fushuling.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fushuling.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fushuling.com\/index.php\/wp-json\/wp\/v2\/comments?post=3818"}],"version-history":[{"count":13,"href":"https:\/\/fushuling.com\/index.php\/wp-json\/wp\/v2\/posts\/3818\/revisions"}],"predecessor-version":[{"id":3844,"href":"https:\/\/fushuling.com\/index.php\/wp-json\/wp\/v2\/posts\/3818\/revisions\/3844"}],"wp:attachment":[{"href":"https:\/\/fushuling.com\/index.php\/wp-json\/wp\/v2\/media?parent=3818"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fushuling.com\/index.php\/wp-json\/wp\/v2\/categories?post=3818"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fushuling.com\/index.php\/wp-json\/wp\/v2\/tags?post=3818"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}