一次完整的Android打包要進行以下的幾步:編譯、代碼混淆、打包apk、簽名apk、apk最佳化。
為了能包涵使用NDK的情況,在這裡使用一個有native代碼的工程TestJni。
在工程根目錄下建立local.properties檔案,輸入sdk和ndk的路徑
例如:
sdk.dir=D:\\Android\\android-sdk
ndk.dir=D:\\Android\\android-ndk
在工程根目錄下建立build.xml,輸入代碼
my.package依賴於native和release,執行了一次ndk編譯和release操作。
開啟cmd,切換到工程根目錄,輸入ant my.package,等待build完成,在bin目錄下產生了未簽名的apk檔案。
代碼混淆
如果在project.properties中配置了proguard.config=proguard.cfg,release的時候會自動進行代碼混淆。在${sdk.dir}/tools/ant/build.xml可以找到相應的target。
proguard.config is ${proguard.config} Proguard.config is enabled
proguard.enabled的依據就是在release模式下,並且設定proguard.config這個屬性。
簽名
在${sdk.dir}/tools/ant/build.xml尋找release target
我們看到有 -release-sign 這個 targer,繼續尋找這個target
查看第一行
如果執行簽名的話 has.keystore 這個條件要成立,繼續尋找 has.keystore
找到上面兩個 condition,has.keystore成立的條件是設定了 key.store 和 key.alias 這兩個property,並且 key.store 長度不能為0。
has.password 成立的條件是,has.keystore成立, 並且設定了 key.store.password 和 key.alias.password,如果沒有這兩個屬性的話,在build過程中會要求輸入密碼。
在local.properties中添加這些屬性
key.store=D:\\Android\\keystore\\test_key.keystore
key.alias=test_key
key.store.password=123456
key.alias.password=123456
開啟cmd,切換到工程根目錄,執行 ant my.package, 在bin目錄中產生了 TestJni-release.apk 。
檢查產生的apk是否進行了最佳化
至此,打包完成。