1.v1签名
v1签名是基于JAR签名来实现的 签名的JAR
v1签名不保护APK的某些部分,例如ZIP元数据。 在APK验证程序在验证时需要处理大量不可信(尚未经过验证)的数据结构,然后会舍弃不受签名保护的数据。这会是APK容易受到攻击或恶意修改。 此外,APK验证程序在验证时必须解压所有已压缩的条目,来进行验证,而这需要花费更多的时间和内存。 所以为了解决这些问题,才有了v2签名。
2.v2签名 v2签名是在Android 7.0 (Nougat) 中加入的APK签名方案,v2签名方案是一种基于全文件签名方案,该方案能够发现所有对APK的受保护部分进行的更改,从而可以更加快速的验证并增强完整性保证。 使用v2签名方案进行签名时,会在APK文件中插入一个APK签名分块,该分块位于 "Central Directory”部分之前,在“APK签名分块”内,v2签名和签名者身份信息会存储在 v2分块中。 如下图所示:
因为v2签名是Android 7.0 (Nougat)的时候加入的APK签名方案 所以v2签名在Android 7.0以下的系统上是不支持的,所以为了支持Android 7.0以下的版本需要使用v1签名,然后再使用v2方案对其进行签名。
这是在Android 7.0以上 APK签名验证过程:
3.v3签名 v3签名是在Android 9.0中加入的APK签名方案 ,该方案主要是在原来v2的基础上增加了APK密钥轮转,这是应用能够在APK更新过程中更改其签名密钥,为了实现轮转,APK必须指示新旧签名密钥之间的信任级别。v3签名方案还在APK签名分块中添加了有关受支持的SDK版本和proof-of-rotation结构信息。
因为v3签名方案是在Android 9.0 新增的 所以在Android 8.0(API级别27)或更低版本的设备不支持更改签名证书。 这是在Android9.0以上APK签名验证过程
个人感觉这个v3签名方案主要是用来无感替换签名证书的。
更多信息请到官网查看:source.android.com/security/ap…