Android签名原理介绍(2)--schemev2

接上一篇,接下来介绍7.0后新增的v2签名认证方式

APK Signature Scheme v2

与v1方式签名不同的是,v2的签名是对整个文件的一种签名方式

直接从字节码上对apk进行签名,不必遍历每个入口进行计算签名

并且每一个改动都会使得签名失败,因此其提高了签名认证的速度和签名保护的安全性

但是有一点得注意的是,v2签名仅用在7.0以上的系统中,因为只有7.0以上的系统有有关v2签名认证的代码

因此为了适配早前的系统,正常还是采用v1签名,或是v1v2签名并存

在后面的代码可以看出来,7.0以上的系统会先进行v2签名的认证,若没检测到v2签名信息,则再进行v1的方法

但是由于一些应用需要打包渠道包,每次修改再编译再签名实在太耗时,大部分会选择关闭v2签名

在build Gradle中添加

v2SigningEnabled false

因为在v1签名中,META-INF中的内容是不会检测的,这使得在打包渠道包时不需要重复重新签名

渠道包指的是在各大应用市场,发布的apk包的清单文件中,某个meta-data标签下,配置的value不一样,这个标签的作用就是用来区分是哪个市场的

阅读更多

Android签名原理介绍(1)--schemev1

前言

因为某些不知名的原因,让我感觉很有必要学习一下apk签名的方式,于是。。。便有了这篇

(真的好久没写了哇,近期烦心事真的太多了)

我在网上搜了各种大大小小关于apk签名的文章,但始终没有能让我满意的,而且也感觉一直缺乏一篇能从字节上分析对比新旧两种签名方式的文章,so……

传统的安卓签名方式是通过jar的签名方式实现的,在apk包下,会有一个META-INF的文件夹,META-INF的文件夹下,会有MANIFEST.MF CERT.SF CERT.RSA三个文件,均是用于apk签名认证的。

而在Android7.0后,新增了一个APK Signature Scheme v2的签名方式,更为强效。而原来的签名方式则是 JAR-signed APK verification (v1 scheme)

详细可看官方的文档

https://source.android.com/security/apksigning/v2#v1-verification

阅读更多