Android APK命令行實現V一、V2簽名及驗證

在AndroidStudio中,咱們能夠很方便的對apk進行打包與簽名,也能夠選擇V1或V2簽名;然而,有些時候(好比反編譯從新打包、apk加固後...),咱們卻須要在AS之外進行簽名。安全

Android

在Android7.0引入了jdk7才支持的V2簽名,這一簽名不須要對全部文件進行摘要計算、且增長了APK 簽名分塊而且該分塊有特定格式,因此,使用V2簽名後,apk的安裝速度與完整性保障都有不錯的提高;然而,因爲須要兼容舊版本,V1簽名不能徹底去掉。bash

V1簽名(jarsigner方式)

因爲安全漏洞問題,最近對app進行了一些改善,其中包括使用了第三方進行加固;加固後,必須對apk進行從新簽名,因而使用瞭如下方式:app

// apksigner -verbose -keystore (簽名地址) -signedjar (簽名後的apk地址) (待簽名apk地址) (別名)
jarsigner -verbose -keystore D:\itlao5.keystore -signedjar D:\itlao5_signed.apk D:\itlao5.apk itlao5
複製代碼

很快,簽名就完成了。然而,把簽名後的apk提交到安全平臺進行掃描,出現了一項新的漏洞,提示沒有使用V2簽名。 spa

Android

V2簽名(apksigner方式)

原來,jarsigner只是對apk進行了V1簽名;前面說到在Android7.0引入了V2簽名,所以,當進入sdk\25.0.0及後續版本,會發現一個apksigner.bat執行腳本。 咱們能夠經過apksigner進行V2簽名,固然,apksigner默認是同時支持V1與V2的,因而:code

// apksigner sign --ks (簽名地址) --ks-key-alias (別名) --out (簽名後的apk地址) (待簽名apk地址)
apksigner sign --ks D:\itlao5.keystore --ks-key-alias itlao5 --out D:\itlao5_signed.apk D:\itlao5.apk
複製代碼

簽名驗證

至此,兼容V一、V2的apk簽名已完成,咱們可使用如下指令驗證是否簽名成功:cdn

apksigner verify -v --print-certs (apk地址)
複製代碼

原文:簡書ThinkinLiu 博客: IT老五blog

ps:記錄這兩條簽名語句是防止之後忘記,至於apksigner的其餘詳情,度娘收藏了不少,這裏就不寫了。get

相關文章
相關標籤/搜索