{"id":24866,"date":"2024-06-06T14:57:05","date_gmt":"2024-06-06T06:57:05","guid":{"rendered":"https:\/\/www.yimenyun.cn\/emen\/?p=24866"},"modified":"2024-06-06T14:57:05","modified_gmt":"2024-06-06T06:57:05","slug":"apk%e5%91%bd%e4%bb%a4%e8%a1%8c%e7%bc%96%e8%af%91%e7%ad%be%e5%90%8d%e6%89%93%e5%8c%85%e5%a4%a7%e5%85%a8","status":"publish","type":"post","link":"https:\/\/www.yimenyun.cn\/emen\/24866\/","title":{"rendered":"apk\u547d\u4ee4\u884c\u7f16\u8bd1\u7b7e\u540d\u6253\u5305\u5927\u5168"},"content":{"rendered":"
APK\u662fAndroid\u5e94\u7528\u7a0b\u5e8f\u7684\u5b89\u88c5\u5305\u6587\u4ef6\uff0c\u5305\u542b\u4e86\u5e94\u7528\u7a0b\u5e8f\u7684\u6240\u6709\u8d44\u6e90\u548c\u4ee3\u7801\u3002\u5f00\u53d1\u8005\u9700\u8981\u5c06\u5e94\u7528\u7a0b\u5e8f\u7f16\u8bd1\u3001\u7b7e\u540d\u548c\u6253\u5305\u6210APK\u6587\u4ef6\u624d\u80fd\u5728Android\u8bbe\u5907\u4e0a\u5b89\u88c5\u548c\u8fd0\u884c\u3002<\/p>\n
APK\u547d\u4ee4\u884c\u7f16\u8bd1\u7b7e\u540d\u6253\u5305\u662f\u4e00\u79cd\u5728\u547d\u4ee4\u884c\u4e0b\u6267\u884c\u7684\u65b9\u5f0f\uff0c\u53ef\u4ee5\u901a\u8fc7\u547d\u4ee4\u884c\u5de5\u5177\u8fdb\u884cAPK\u7f16\u8bd1\u3001\u7b7e\u540d\u548c\u6253\u5305\u7684\u64cd\u4f5c\u3002\u8fd9\u79cd\u65b9\u5f0f\u9002\u7528\u4e8e\u81ea\u52a8\u5316\u6784\u5efa\u548c\u6301\u7eed\u96c6\u6210\u7b49\u573a\u666f\u3002<\/p>\n
\u4ee5\u4e0b\u662fAPK\u547d\u4ee4\u884c\u7f16\u8bd1\u7b7e\u540d\u6253\u5305\u7684\u8be6\u7ec6\u6b65\u9aa4\uff1a<\/p>\n
1. \u7f16\u8bd1\uff1a\u4f7f\u7528Android SDK\u4e2d\u7684\u547d\u4ee4\u884c\u5de5\u5177`aapt`\u8fdb\u884c\u7f16\u8bd1\u64cd\u4f5c\u3002aapt\u662fAndroid Asset Packaging Tool\u7684\u7f29\u5199\uff0c\u5b83\u8d1f\u8d23\u5c06\u5e94\u7528\u7a0b\u5e8f\u7684\u8d44\u6e90\u6587\u4ef6\u6253\u5305\u6210\u4e8c\u8fdb\u5236\u6587\u4ef6\uff08.apk\uff09\u3002<\/p>\n
\u7f16\u8bd1\u547d\u4ee4\u793a\u4f8b\uff1a<\/p>\n
“`<\/p>\n
aapt package -f -m -J gen\/ -M AndroidManifest.xml -S res\/ -I android.jar<\/p>\n
“`<\/p>\n
– `-f`\uff1a\u5f3a\u5236\u7f16\u8bd1\uff0c\u5373\u4f7f\u8d44\u6e90\u6587\u4ef6\u6ca1\u6709\u53d1\u751f\u53d8\u5316\u4e5f\u4f1a\u91cd\u65b0\u7f16\u8bd1\u3002<\/p>\n
– `-m`\uff1a\u751f\u6210R.java\u6587\u4ef6\uff0c\u7528\u4e8e\u8bbf\u95ee\u8d44\u6e90\u6587\u4ef6\u3002<\/p>\n
– `-J gen\/`\uff1a\u6307\u5b9a\u751f\u6210\u7684R.java\u6587\u4ef6\u7684\u8f93\u51fa\u76ee\u5f55\u3002<\/p>\n
– `-M AndroidManifest.xml`\uff1a\u6307\u5b9aAndroidManifest.xml\u6587\u4ef6\u7684\u8def\u5f84\u3002<\/p>\n
– `-S res\/`\uff1a\u6307\u5b9ares\u6587\u4ef6\u5939\u7684\u8def\u5f84\uff0c\u5305\u542b\u4e86\u5e94\u7528\u7a0b\u5e8f\u7684\u8d44\u6e90\u6587\u4ef6\u3002<\/p>\n
– `-I android.jar`\uff1a\u6307\u5b9aAndroid API\u7684jar\u5305\u8def\u5f84\uff0c\u7528\u4e8e\u7f16\u8bd1\u65f6\u7684\u8d44\u6e90\u5f15\u7528\u68c0\u67e5\u3002<\/p>\n
2. \u7f16\u8bd1Java\u4ee3\u7801\uff1a\u4f7f\u7528Java\u7f16\u8bd1\u5668\uff08\u4f8b\u5982Javac\uff09\u8fdb\u884cJava\u4ee3\u7801\u7684\u7f16\u8bd1\u3002Java\u4ee3\u7801\u662f\u5e94\u7528\u7a0b\u5e8f\u7684\u4e1a\u52a1\u903b\u8f91\u90e8\u5206\uff0c\u9700\u8981\u7f16\u8bd1\u6210.class\u6587\u4ef6\u3002<\/p>\n
\u7f16\u8bd1\u547d\u4ee4\u793a\u4f8b\uff1a<\/p>\n
“`<\/p>\n
javac -d bin\/ -sourcepath src\/ -classpath android.jar src\/com\/example\/MainActivity.java<\/p>\n
“`<\/p>\n
– `-d bin\/`\uff1a\u6307\u5b9a\u7f16\u8bd1\u751f\u6210\u7684.class\u6587\u4ef6\u8f93\u51fa\u7684\u76ee\u5f55\u3002<\/p>\n
– `-sourcepath src\/`\uff1a\u6307\u5b9aJava\u6e90\u4ee3\u7801\u7684\u8def\u5f84\u3002<\/p>\n
– `-classpath android.jar`\uff1a\u6307\u5b9aAndroid API\u7684jar\u5305\u8def\u5f84\uff0c\u7528\u4e8e\u7f16\u8bd1\u65f6\u7684\u7c7b\u5f15\u7528\u68c0\u67e5\u3002<\/p>\n
3. \u6253\u5305\uff1a\u4f7f\u7528Android SDK\u4e2d\u7684\u547d\u4ee4\u884c\u5de5\u5177`dx`\u8fdb\u884c\u6253\u5305\u64cd\u4f5c\u3002dx\u5de5\u5177\u5c06\u7f16\u8bd1\u751f\u6210\u7684.class\u6587\u4ef6\u8f6c\u6362\u4e3aDalvik\u5b57\u8282\u7801\uff0c\u5e76\u5c06\u5b57\u8282\u7801\u6253\u5305\u6210dex\u6587\u4ef6\u3002<\/p>\n
\u6253\u5305\u547d\u4ee4\u793a\u4f8b\uff1a<\/p>\n
“`<\/p>\n
dx –dex –output=bin\/classes.dex bin\/<\/p>\n
“`<\/p>\n
– `–dex`\uff1a\u6307\u5b9a\u5c06class\u6587\u4ef6\u8f6c\u6362\u4e3adex\u6587\u4ef6\u3002<\/p>\n
– `–output=bin\/classes.dex`\uff1a\u6307\u5b9a\u8f93\u51fa\u7684dex\u6587\u4ef6\u8def\u5f84\u3002<\/p>\n
– `bin\/`\uff1a\u6307\u5b9a\u5305\u542b.class\u6587\u4ef6\u7684\u76ee\u5f55\u3002<\/p>\n
4. \u7b7e\u540d\uff1a\u4f7f\u7528Java\u7684keytool\u5de5\u5177\u751f\u6210\u5bc6\u94a5\u548c\u8bc1\u4e66\u6587\u4ef6\uff0c\u5e76\u4f7f\u7528Android SDK\u4e2d\u7684\u547d\u4ee4\u884c\u5de5\u5177`jarsigner`\u5bf9APK\u6587\u4ef6\u8fdb\u884c\u7b7e\u540d\u3002<\/p>\n
– \u751f\u6210\u5bc6\u94a5\u548c\u8bc1\u4e66\u6587\u4ef6\uff1a<\/p>\n
“`<\/p>\n
keytool -genkeypair -alias mykey -keyalg RSA -keysize 2048 -validity 3650 -keystore mykeystore.jks<\/p>\n
“`<\/p>\n
– `-genkeypair`\uff1a\u751f\u6210\u5bc6\u94a5\u5bf9\u3002<\/p>\n
– `-alias mykey`\uff1a\u6307\u5b9a\u522b\u540d\u3002<\/p>\n
– `-keyalg RSA`\uff1a\u6307\u5b9a\u4f7f\u7528RSA\u7b97\u6cd5\u3002<\/p>\n
– `-keysize 2048`\uff1a\u6307\u5b9a\u5bc6\u94a5\u957f\u5ea6\u3002<\/p>\n
– `-validity 3650`\uff1a\u6307\u5b9a\u8bc1\u4e66\u7684\u6709\u6548\u671f\u3002<\/p>\n
– `-keystore mykeystore.jks`\uff1a\u6307\u5b9a\u751f\u6210\u7684\u5bc6\u94a5\u5e93\u6587\u4ef6\u540d\u3002<\/p>\n
– \u7b7e\u540d\u547d\u4ee4\u793a\u4f8b\uff1a<\/p>\n
“`<\/p>\n
jarsigner -verbose -keystore mykeystore.jks -sig\u5b89\u5353\u6c38\u4e45\u7b7e\u540d\u5de5\u5177<\/a>ne\u5b89\u5353sha1\u7b7e\u540d\u83b7\u53d6\u5de5\u5177<\/a>djar myapp_signed.apk myapp_unsigned.apk mykey<\/p>\n “`<\/p>\n – `-keystore mykeystore.jks`\uff1a\u6307\u5b9a\u5bc6\u94a5\u5e93\u6587\u4ef6\u8def\u5f84\u3002<\/p>\n – `<\/p>\n -signedjar myapp_signed.apk`\uff1a\u6307\u5b9a\u7b7e\u540d\u540e\u7684APK\u6587\u4ef6\u8def\u5f84\u3002<\/p>\n – `myapp_unsigned.apk`\uff1a\u5f85\u7b7e\u540d\u7684APK\u6587\u4ef6\u8def\u5f84\u3002<\/p>\n – `mykey`\uff1a\u6307\u5b9a\u522b\u540d\u3002<\/p>\n 5. \u5bf9\u9f50\uff08\u53ef\u9009\uff09\uff1a\u4f7f\u7528Android SDK\u4e2d\u7684\u547d\u4ee4\u884c\u5de5\u5177`zipalign`\u5bf9APK\u6587\u4ef6\u8fdb\u884c\u5bf9\u9f50\u64cd\u4f5c\u3002\u5bf9\u9f50\u662f\u4e00\u79cd\u4f18\u5316\u624b\u6bb5\uff0c\u53ef\u4ee5\u63d0\u9ad8\u5e94\u7528\u7a0b\u5e8f\u7684\u542f\u52a8\u901f\u5ea6\u3002<\/p>\n \u5bf9\u9f50\u547d\u4ee4\u793a\u4f8b\uff1a<\/p>\n “`<\/p>\n zipalign -v 4 myapp_signed.apk myapp_aligned.apk<\/p>\n “`<\/p>\n – `-v`\uff1a\u8f93\u51fa\u8be6\u7ec6\u65e5\u5fd7\u3002<\/p>\n – `4`\uff1a\u5bf9\u9f50\u7684\u5b57\u8282\u5bf9\u9f50\u6570\uff0c\u4e00\u822c\u4f7f\u75284\u3002<\/p>\n \u81f3\u6b64\uff0c\u7ecf\u8fc7\u7f16\u8bd1\u3001\u6253\u5305\u548c\u7b7e\u540d\u7b49\u4e00\u7cfb\u5217\u6b65\u9aa4\uff0c\u6211\u4eec\u5f97\u5230\u4e86\u6700\u7ec8\u7684\u5df2\u7b7e\u540d\u7684APK\u6587\u4ef6\u3002\u8fd9\u4e2aAPK\u6587\u4ef6\u53ef\u4ee5\u5728Android\u8bbe\u5907\u4e0a\u5b89\u88c5\u548c\u8fd0\u884c\u3002<\/p>\n","protected":false},"excerpt":{"rendered":" APK\u662fAndroid\u5e94\u7528\u7a0b\u5e8f\u7684\u5b89\u88c5\u5305\u6587\u4ef6\uff0c\u5305\u542b\u4e86\u5e94\u7528\u7a0b\u5e8f\u7684\u6240\u6709\u8d44\u6e90\u548c\u4ee3\u7801\u3002\u5f00\u53d1\u8005\u9700\u8981\u5c06\u5e94\u7528\u7a0b\u5e8f\u7f16\u8bd1\u3001\u7b7e\u540d\u548c\u6253\u5305\u6210APK\u6587\u4ef6\u624d\u80fd\u5728Android\u8bbe\u5907\u4e0a\u5b89\u88c5\u548c\u8fd0\u884c\u3002APK\u547d\u4ee4\u884c\u7f16\u8bd1\u7b7e\u540d\u6253\u5305\u662f\u4e00\u79cd\u5728\u547d\u4ee4<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[25039,693,16,25038,1075],"topic":[],"class_list":["post-24866","post","type-post","status-publish","format-standard","hentry","category-appzs","tag-25039","tag-693","tag-16","tag-25038","tag-1075"],"_links":{"self":[{"href":"https:\/\/www.yimenyun.cn\/emen\/wp-json\/wp\/v2\/posts\/24866","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yimenyun.cn\/emen\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yimenyun.cn\/emen\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yimenyun.cn\/emen\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yimenyun.cn\/emen\/wp-json\/wp\/v2\/comments?post=24866"}],"version-history":[{"count":1,"href":"https:\/\/www.yimenyun.cn\/emen\/wp-json\/wp\/v2\/posts\/24866\/revisions"}],"predecessor-version":[{"id":24895,"href":"https:\/\/www.yimenyun.cn\/emen\/wp-json\/wp\/v2\/posts\/24866\/revisions\/24895"}],"wp:attachment":[{"href":"https:\/\/www.yimenyun.cn\/emen\/wp-json\/wp\/v2\/media?parent=24866"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yimenyun.cn\/emen\/wp-json\/wp\/v2\/categories?post=24866"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yimenyun.cn\/emen\/wp-json\/wp\/v2\/tags?post=24866"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.yimenyun.cn\/emen\/wp-json\/wp\/v2\/topic?post=24866"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}<\/figure>\n<\/p>\n