命令行下面編譯打包混淆對齊APK

由於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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章