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

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

这里就不能不重点介绍以下v1和V2签名了:
浅谈:android签名打包v1和v2的区别_第1张图片

这里可以看到: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,直接打包签名

最后:感谢下面二位作者:
http://blog.csdn.net/francisbingo/article/details/78655848
http://blog.csdn.net/lonewolf521125/article/details/74535413

你可能感兴趣的:(sdk)