Android APK命令行实现V1、V2签名及验证

  • 4,769 views
  • 阅读模式

AndroidStudio中,我们可以很方便的对apk进行打包与签名,也可以选择V1或V2签名;然而,有些时候(比如反编译重新打包、apk加固后...),我们却需要在AS以外进行签名。

Android7.0引入了jdk7才支持的V2签名,这一签名不需要对所有文件进行摘要计算、且增加了APK 签名分块并且该分块有特定格式,所以,使用V2签名后,apk的安装速度与完整性保障都有不错的提升;然而,由于需要兼容旧版本,V1签名不能完全去掉。

V1签名(jarsigner方式)

由于安全漏洞问题,最近对app进行了一些改善,其中包括使用了第三方进行加固;加固后,必须对apk进行重新签名,于是使用了以下方式:

// apksigner -verbose -keystore (签名地址) -signedjar (签名后的apk地址) (待签名apk地址) (别名)
jarsigner -verbose -keystore D:\itlao5.keystore -signedjar D:\itlao5_signed.apk D:\itlao5.apk itlao5

很快,签名就完成了。然而,把签名后的apk提交到安全平台进行扫描,出现了一项新的漏洞,提示没有使用V2签名。

 

V2签名(apksigner方式)

原来,jarsigner只是对apk进行了V1签名;前面说到在Android7.0引入了V2签名,因此,当进入sdk\25.0.0及后续版本,会发现一个apksigner.bat执行脚本。
我们可以通过apksigner进行V2签名,当然,apksigner默认是同时支持V1与V2的,于是:

// 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

签名验证

至此,兼容V1、V2的apk签名已完成,我们可以使用以下指令验证是否签名成功:

apksigner verify -v --print-certs (apk地址)

原文:简书ThinkinLiu 博客: IT老五

ps:记录这两条签名语句是防止以后忘记,至于apksigner的其他详情,度娘收藏了很多,这里就不写了。

weinxin
扫码关注微信公众号--IT老五
微信扫一扫关注公众号,获取更多实用app,订阅地址不定时更新
Liu, Thinkin
  • 本文由 发表于 2019-03-05 16:09:35
  • 转载请务必保留本文链接:https://itlao5.com/809.html
评论  0  访客  0
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定