参考:http://blog.csdn.net/a200710716/article/details/51644421
zip文件格式:
[文件头+文件数据+数据描述符]{此处可重复n次}+核心目录+目录结束标识
当压缩包中有多个文件时,就会有多个[文件头+文件数据+数据描述符]
压缩源文件数据区
[local file header + file data + data descriptor]
记录着压缩的所有文件的内容信息,每个压缩文件都由local file header 、file data、data descriptor三部分组成,在这个数据区中每一个压缩的源文件/目录都是一条记录。
local file header 文件头
用于标识该文件的开始,记录了该压缩文件的信息。文件头标识,值固定(0x04034b50)
Central directory 核心目录
记录了压缩文件的目录信息,在这个数据区中每一条纪录对应在压缩源文件数据区中的一条数据。文件标示,值固定(0x02014b50)
目录结束标识
目录结束标识存在于整个归档包的结尾,用于标记压缩的目录数据的结束。每个压缩文件必须有且只有一个EOCD记录。标记头(0x06054b50)
主要看这个结构的注释。
Offset | Bytes | Description | 译 |
---|---|---|---|
0 | 4 | End of central directory signature = 0x06054b50 | 核心目录结束标记(0x06054b50) |
4 | 2 | Number of this disk | 当前磁盘编号 |
6 | 2 | number of the disk with the start of the central directory | 核心目录开始位置的磁盘编号 |
8 | 2 | total number of entries in the central directory on this disk | 该磁盘上所记录的核心目录数量 |
10 | 2 | total number of entries in the central directory | 核心目录结构总数 |
12 | 2 | Size of central directory (bytes) | 核心目录的大小 |
16 | 4 | offset of start of central directory with respect to the starting disk number | 核心目录开始位置相对于archive开始的位移 |
20 | 2 | .ZIP file comment length(n) | 注释长度 |
22 | n | .ZIP Comment | 注释内容 |
即:
1.zip注释可随意修改(最大长度2个字节即256长度)
2.如何寻找注释内容?找标记头位移20位
如:看某个apk注释
此apk的注释内容为:
是个json数据:{"pn":"MFW","sf":0} 其中 末尾的13 是 回车 00 是空字符
apk多渠道探讨:
1.由此可见此注释内容可以写,apk渠道信息。
2.在安装到手机号找到对应apk获取此注释内容存本地。
美团模式:
参考:https://tech.meituan.com/mt-apk-packaging.html
每打一个渠道包只需复制一个apk,在META-INF
中添加一个使用渠道号命名的空文件即可。