在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