一坎炼、簽名方式
在Android中愧膀,所有 APK 必須先使用證書進行簽名才能安裝到設備上。當前主流的有兩種簽名選項 V1(Jar Signature) 谣光、V2(Full APK Signature)檩淋。從Android 7.0開始, 谷歌增加新簽名方案 V2,但Android 7.0以下版本, 只能用舊簽名方案 V1萄金。jarsigner使用java自帶的jar簽名蟀悦,簽名方案只能v1。apksigner是Android特有的簽名氧敢,支持多種簽名方案(v1~v4)日戈。
- V1簽名
對zip壓縮包的每個文件進行驗證, 簽名后還能對壓縮包修改福稳。對V1簽名的apk解壓后涎拉,在META-INF存放簽名文件(MANIFEST.MF, CERT.SF, CERT.RSA)瑞侮,其中MANIFEST.MF文件保存所有文件的SHA1指紋。 - V2簽名
對zip壓縮包的整個文件驗證鼓拧, 簽名后不能修改壓縮包(包括zipalign)半火,對V2簽名的apk解壓,沒有發(fā)現(xiàn)簽名文件季俩,重新壓縮后V2簽名就失效钮糖。V2簽名更安全因為不能修改壓縮包,簽名驗證時間更短酌住,不需要解壓驗證店归,安裝速度加快。apksigner工具默認同時使用V1和V2簽名酪我。 - V3簽名
v3 是在 Android 9 中引入的消痛。Android 9 支持 APK 密鑰輪替,這使應用能夠在 APK 更新過程中更改其簽名密鑰都哭。為了實現(xiàn)輪替秩伞,APK 必須指示新舊簽名密鑰之間的信任級別。 - V4 簽名
v4 是在 Android 11 中引入的欺矫。v4 支持與流式傳輸兼容的簽名方案纱新。v4 簽名需要 v2 或 v3 簽名作為補充。 v4同樣是為了新功能而出現(xiàn)的: ADB 增量 APK 安裝穆趴。
二脸爱、簽名步驟
1.工具文件
Android Studio在Debug時,對App簽名都會使用一個默認的密鑰庫未妹,默認在C:\Users\用戶名.android\debug.keystore
jarsigner 位于JDK/bin
apksigner 位于Android SDK/build-tools/SDK版本
apktool 官網(wǎng)下載apktool.bat和apktool.jar
2.查看密鑰庫
keytool -list -v -keystore debug.keystore
3.移除現(xiàn)有的簽名
使用Android SDK中的apktool工具來解包APK簿废,移除現(xiàn)有的簽名。
apktool命令解包一個APK文件時教寂,apktool會自動移除該APK的簽名捏鱼。這是因為APK的簽名是保存在META-INF目錄下的,而當你使用apktool d(即decode)命令解包APK時酪耕,apktool會解析APK文件并提取出其中的資源导梆、代碼等,但不會保留簽名信息迂烁。
apktool d -f your_app.apk -o output_dir
4.重新打包APK
解包完成后看尼,重新打包APK。
apktool b output_dir -o unsigned.apk
5.zipalign和V2簽名
zipalign 是對zip包對齊的工具,使APK包內(nèi)未壓縮的數(shù)據(jù)有序排列對齊,從而減少APP運行時內(nèi)存消耗盟步。zipalign可以在V1簽名后執(zhí)行藏斩,但zipalign不能在V2簽名后執(zhí)行,只能在V2簽名之前執(zhí)行
位于Android SDK/build-tools/SDK版本/zipalign.exe
- 對齊
zipalign -p -f -v 4 待簽名.apk 對齊后.apk
- 檢查APK是否對齊
zipalign -c -v 4 in.apk
6.簽名
- jarsigner
jarsigner -keystore 秘鑰文件 -storepass 密鑰庫的密碼 -keypass 私鑰密 <apk_file>.apk <alias>
- apksigner
apksigner sign --ks 密鑰文件 --ks-key-alias 密鑰別名 --ks-pass pass:密碼 --key-pass pass:密碼 --out 簽名.apk 對齊.apk
若密鑰庫中有多個密鑰對,則必須指定密鑰別名却盘,若密鑰庫有一個密鑰對,則可省略
禁用V2簽名
apksigner sign --v2-signing-enabled false --ks 密鑰庫名 xxx.apk
7.簽名驗證
- keytool
keytool -printcert -jarfile MyApp.apk
- apksigner
apksigner verify -v --print-certs xxx.apk