网络之家Android开发笔记Android开发经验谈

APK Signature Scheme v2渠道写入方案分析与

2017-06-07  本文已影响138人  敖大胆

使用V2的原因

Android 7.0(Nougat)引入一项新的应用签名方案APK Signature Scheme v2,它是一个对全文件进行签名的方案,能提供更快的应用安装时间、对未授权APK文件的更改提供更多保护.

v2 signature 官方解释

同时V2方案对V1方案做了很好的兼容处理(Apk中同时存在v1,v2签名)。

V1签名

apk-signature-v1-location.png

只是校验了apk资源,并没有约束zip,签名信息存储在zip/META-INF中。

V2 Signature详解

1,3,4是ZIP文件格式,详细的ZIP格式可看:ZIP file_format

我们重点来看一下这个ID-value,它由一个8字节的长度标示+4字节的ID+它的负载组成。V2的签名信息是以ID(0x7109871a)的ID-value来保存在这个区块中,不知大家有没有注意这是一组ID-value,也就是说它是可以有若干个这样的ID-value来组成

Offset Bytes Description
0 8 Apk Signing Block 大小,但是不包含本身,也就是实际Block大小需要+8
8 8 键值对的起始标记,存储键值对的大小,也就是后面pair的,key+value 占用的byte
16 4+n key 为 4byte,value 为变化的
@+16 8 Apk Signing Block同上
@+24 16 magic “APK Sig Block 42”
apk-sections.png

被保护的部分包括1,3,4,这三个部分不能修,但是EOCD中offset of start of central directory,relative to start of archive可以修改。

得到的有用信息

  1. APK Signing Block 是可变的

  2. APK Signing Block是通过已知键值对方式存储,未知ID Android系统将不做处理。

  3. 只需要生成一个基础包,加入渠道信息不用重新打包

APP渠道如何写入

如果一次需要打100渠道包,使用flavors是一件烦人的事情,速度非常慢,有没有更快的方式呢?

V1: setComment 和 META-INF 中写入Channel信息,能解决这个问题,并且速度非常快。

V2:V1的方式不可行,因为签名范围扩大到整个zip,改动后会导致apk无法安装,所以只能通过新方式写入。

实现Demo

AndroidV2SignatureChannelTool

参考文献

apksig源码

v2 signature 官方解释

上一篇下一篇

猜你喜欢

热点阅读