概述
Android目前支持以下4种应用签名方案:
- v1:基于 JAR 签名
- v2:在 Android 7 引入
- v3:在 Android 9 引入
- v4:在 Android 11 引入
为了最大限度地提高兼容性,请按照 v1、v2、v3 的先后顺序采用所有方案对应用进行签名。 与只通过 v1 方案签名的应用相比,还通过 v2+ 方案签名的应用能够更快的安装到 Android 7.0 及更高版本的设备上。更低版本的 Android 平台会忽略 v2+ 签名,这就需要应用包含 v1 签名。
消息摘要/数字证书
消息摘要:在消息数据上,执行一个单向的 Hash 函数,生成一个固定长度的Hash值,这个Hash值即是消息摘要。
数字证书:保证公钥的安全可信
数字签名 = 消息摘要技术 + 非对称加密技术(数字证书)
大概了解完是什么东东之后我们来看看各个版本之间的优劣势对比。
v1的缺点
- 在校验的过程中需要解压,因为.MF文件的摘要信息是基于原始未压缩的文件内容,因此在校验的时候需要解压出原始数据,而这个解压操作无疑是耗时的。
- apk包的完整性校验不够强。这里可以看到如果我们在apk签名后,如果对apk包中没有涉及到原始文件内容的数据块做修改那么这层校验机制就会失效。
v2是怎么做的
简单来说,v2签名模式在原先apk块中添加了一个新的块(签名块),新的块存储了签名、摘要、签名算法、证书链和一些额外的属性等。这个块有特定的格式。如下图所示
//此处应有图
所以说,v2 能够发现对 APK 受保护部分进行的所有更改,从而有助于加快验证速度并增强完整性保证。
v3的出现
v2都这么好了,为什么还要有v3呢,让我们瞧瞧。
签名方案 v3 中加入了证书的旋转校验,也就是可以在应用更新的过程中更改其签名密钥。 详见:Android P v3签名新特性
直到v4
v3的出现已经这么强悍,v4到底有什么过人之处?
其实v4与v2v3没有太大差异,主要是一个增量安装,能够在安装大型app时节省时间。
值得注意的是,v4 签名需要 v2 或 v3 签名作为补充。
参考链接: