浅谈:android签名打包v1和v2的区别

文章来源:https://blog.csdn.net/willba/article/details/78885966

为什么要谈这个问题: 

故事发生的原因:我这边做了正式的签名后(v1和v2同时勾选,产生正式的apk),拿给后台,后台再对我的apk签名再进行处理(截取部分签名后,然后重新签名,打入渠道号)!最后神奇的现象发生了,经过后台处理后的apk在7.0以下的手机是可以安装的,7.0及以上的手机是不能安装!

这里就不能不重点介绍以下v1和V2签名了: 

这里可以看到:v1签名是对jar进行签名,V2签名是对整个apk签名:官方介绍就是:v2签名是在整个APK文件的二进制内容上计算和验证的,v1是在归档文件中解压缩文件内容。

二者签名所产生的结果: 

v1:在v1中只对未压缩的文件内容进行了验证,所以在APK签名之后可以进行很多修改——文件可以移动,甚至可以重新压缩。即可以对签名后的文件在进行处理 

v2:v2签名验证了归档中的所有字节,而不是单独的ZIP条目,如果您在构建过程中有任何定制任务,包括篡改或处理APK文件,请确保禁用它们,否则您可能会使v2签名失效,从而使您的APKs与Android 7.0和以上版本不兼容。

google官方最后也说了:一个APK可以同时由v1和v2签名同时签署,所以它仍然可以向后兼容以前的Android版本。

根据实际开发的经验总结:

一定可行的方案: 只使用 v1 方案       

不一定可行的方案:同时使用 v1 和 v2 方案       

对 7.0 以下一定不行的方案:只使用 v2 方案

1, 如果要支持 Android 7.0 以下版本,那么尽量同时选择两种签名方式,但是一旦遇到签名问题,可以只使用 v1 签名方案   

2,如果需要对签名后的信息做处理修改,那就使用v1签名方案   

3,如果最后遇到各种不同的问题,可以不勾选v1和v2,直接打包签名

你可能感兴趣的:(浅谈:android签名打包v1和v2的区别)