Android签名方案
Google文档:https://source.android.google.cn/docs/security/features/apksigning?hl=zh-cn
Android 系统从诞生到现在的1.0版本,一共经历了4代应用签名方案,分别是v1、v2、v3和v4方案。
v1 方案:基于 JAR 签名。(劣势:签名校验速度慢,完整性保障不够)
v2 方案:APK 签名方案 v2,在 Android 7.0 引入。
v3 方案:APK 签名方案v3,在 Android 9.0 引入。
v4 方案:APK 签名方案v4,在 Android 11.0 引入。(用来支持 ADB 增量 APK 安装。目前的使用场景不多,有需要的请自行解决。)
其中,v1 到 v2 是颠覆性的,主要是为了解决 JAR 签名方案的安全性问题,而到了 v3 方案,其实结构上并没有太大的调整,可以理解为 v2 签名方案的升级版。区别仅在于v3版本解决了v2版本不能更换签名秘钥的问题。
关于v1,v2,v3详细文档请移步https://blog.51cto.com/u_15520037/5703487,此处不在赘述。
怎么查看apk使用的签名版本?
AndroidStudio已经集成了apksigner工具,只需要进入对应目录执行命令即可
步骤:windows+r,输入cmd,进入命令行模式,进入AndroidSdk安装目录,比如我自己的路径为D:\AndroidSdk\build-tools\29.0.3,执行 “apksigner verify -v apk路径”
apksigner verify -v (待验证的apk地址)
例:apksigner verify -v D:\androidDemo\ASVersionTest\app\build\outputs\apk\release\ASVersionSign.apk
结果如下:
查看v3方案签名包结果
怎么使用v3版本签名?
低版本的AS提供了v1,v2版本的选项但是高版本的AS在打包的时候,光秃秃的,没有选择签名版本的选项,直接打出的包也是只支持v2版本的签名
这种情况下,可以直接用apksigner进行签名
apksigner sign --ks (签名地址) --ks-key-alias (别名) --out (签名后的apk地址) (待签名apk地址)
例:apksigner sign --ks E:\winsafe.keystore --ks-key-alias winsafe --out E:\JXSDev\app\build\outputs\apk\release\MobilDealer_sign_1.2.9.apk E:\JXSDev\app\build\outputs\apk\release\MobilDealer1.2.9.apk
以上的待签名apk获取如下执行完后会回到初始状态,查看前面配置的签名后的apk地址,已经有包生成了。利用以上的验证命令,验证生成包的版本,成功!