在AndroidStudio中,咱們能夠很方便的對apk進行打包與簽名,也能夠選擇V1或V2簽名;然而,有些時候(好比反編譯從新打包、apk加固後...),咱們卻須要在AS之外進行簽名。安全
在Android7.0引入了jdk7才支持的V2簽名,這一簽名不須要對全部文件進行摘要計算、且增長了APK 簽名分塊而且該分塊有特定格式,因此,使用V2簽名後,apk的安裝速度與完整性保障都有不錯的提高;然而,因爲須要兼容舊版本,V1簽名不能徹底去掉。bash
因爲安全漏洞問題,最近對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
原來,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