Android開發(fā)之通過apksigner對apk進(jìn)行v2簽名

本文對使用360加固并采用美團(tuán)walle打渠道包的童鞋 可能有所幫助。

1 前言

在 Android 7.0 Nougat 中引入了全新的 APK Signature Scheme v2簽名方式,美團(tuán)也推出相應(yīng)的Android渠道包生成工具Walle。
360加固后需要重新簽名,借助360官方提供的簽名工具qihoo apk signer,是采用的7.0以前的v1簽名,這時(shí)再通過walle打渠道包,是無法成功往apk寫入渠道號的。這時(shí)我們就必須借助Android SDK提供的apksigner工具對已經(jīng)打包好的apk進(jìn)行v2簽名。

2 基本使用

Android官方文檔已經(jīng)對apksigner的使用有比較詳細(xì)的解釋。下面說說實(shí)際的操作步驟:

2.1 ZipAlign

zip對齊,因?yàn)锳PK包的本質(zhì)是一個(gè)zip壓縮文檔,經(jīng)過邊界對齊方式優(yōu)化能使包內(nèi)未壓縮的數(shù)據(jù)有序的排列,從而減少應(yīng)用程序運(yùn)行時(shí)的內(nèi)存消耗 ,通過空間換時(shí)間的方式提高執(zhí)行效率(zipalign后的apk包體積增大了100KB左右)。
打開cmd,把目錄切換到SDK的build-tools目錄下(例如 E:\SDK\build-tools\25.0.2\),執(zhí)行:

.\zipalign.exe -v -p 4 input.apk output.apk

zipalign命令選項(xiàng)不多:
-f : 輸出文件覆蓋源文件
-v : 詳細(xì)的輸出log
-p : outfile.zip should use the same page alignment for all shared object files within infile.zip
-c : 檢查當(dāng)前APK是否已經(jīng)執(zhí)行過Align優(yōu)化。
另外上面的數(shù)字4是代表按照4字節(jié)(32位)邊界對齊。

2.2 apksigner

這個(gè)工具位于SDK目錄的build-tools目錄下。必須說明的是,v2簽名方式時(shí)在Android7.0后才推出的,所以只有版本>25的SDK\build-tools\中才能找到apksigner.jar。
打開cmd,把目錄切到SDK\build-tools\版本號\lib下(例如E:\SDK\build-tools\25.0.2\lib),執(zhí)行:

java -jar apksigner.jar sign           //執(zhí)行簽名操作
 --ks 你的jks路徑                                 //jks簽名證書路徑
--ks-key-alias 你的alias           //生成jks時(shí)指定的alias
--ks-pass pass:你的密碼          //KeyStore密碼
--key-pass pass:你的密碼   //簽署者的密碼,即生成jks時(shí)指定alias對應(yīng)的密碼
--out output.apk                         //輸出路徑
input.apk                                     //被簽名的apk

示例:

java -jar apksigner.jar sign  --ks key.jks  --ks-key-alias releasekey  --ks-pass pass:pp123456  --key-pass pass:pp123456  --out output.apk  input.apk    

apksigner還支持另外的一些選項(xiàng),詳情點(diǎn)擊這里。包括指定min-sdk版本、max-sdk版本、輸出詳細(xì)信息、檢查apk是否已經(jīng)簽名等等。
例如檢查apk是否已經(jīng)簽名:

java -jar apksigner.jar verify -v my.apk
verify.png

3 總結(jié)

zipalign + apksigner,兩步走完成對apk包的v2簽名。且以上工具位于AndroidSDK目錄的build-tools中。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容