由於IDE用不了,需要在命令行下面執行打包等一系列工作,由於我是基於源碼編譯的,那麼我就從沒有混淆的由makefile生成的中間文件classes.jar開始:
1.先對classes.jar進行混淆:
我的classes.jar的目錄是在out/target/common/obj/APPS/XXX_intermediates/classes.jar
混淆命令,由於命令太長,省略了一部分classpath:
java -jar /home/easybd/kitkat/prebuilts/tools/common/proguard/proguard4.7/lib/proguard.jar @out/pop/KK$1/proguard.flags -injars out/pop/classes.jar -outjars out/pop/classes_p.jar -libraryjars /home/easybd/kitkat/vendor/easyandroid/packages/$1/libs/android.common.jar -dontskipnonpubliclibraryclassmembers -optimizationpasses 5 -verbose -ignorewarnings
2.將jar包轉成安卓的dex文件:
dx --dex --output=out/pop/classes.dex --no-optimize out/pop/classes_p.jar
3.打包apk
把makefile編譯的中間文件package.apk文件拿出來二次利用:
package.apk文件在:out/target/product/generic/obj/APPS/KK$1_intermediates/package.apk.unsigned
A:先把package.apk裏面的classes.dex 刪除掉:
aapt r out/pop/package.apk classes.dex
B:再把我們第2步生成的classes.dex替換進去:
aapt add -k out/pop/package.apk out/pop/classes.dex
4.對APK進行簽名(XXX是keystore密碼)
echo的作用是避免在命令行中再手動輸入keystore的密碼。
echo "XXX" | jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore out/pop/apk.keystore out/pop/package.apk XXX
5.對APK進行優化,對齊
zipalign -v 4 out/pop/package.apk out/pop/KK$1/KK$1.apk
至此,我們需要的最終的APK生成了,收工。
PS:試過直接打包APK的,但是沒能成功,如下命令:
aapt package -u -z -M vendor/easyandroid/packages/Dialer/AndroidManifest.xml -S vendor/easyandroid/packages/Dialer/res -I out/target/common/obj/APPS/framework-res_intermediates/package-export.apk -F out/pop/package.apk