渠道打包的意义
当我们发布安卓app投放到应用宝、安卓市场等渠道的时候,需要区分各个渠道的统计支付、登陆、充值数据的时候,这就需要对app进行渠道标识及对apk进行打包。
常见打包方法和工具
- 编写app代码的时候把渠道号写入AndroidManifestx.xml
- 使用apktool工具反编译apk后把渠道号写入AndroidManifestx.xml
- apk其实就是zip文件,解压apk向META-INF文件夹写入渠道号文件,不会对签名产生影响
- 把渠道号写入zip注释里面,目前各大公司都是使用的这种方法,包括腾讯(强烈推荐)
怎样写入渠道号
- 首先我们来了解一下zip文件格式,我们使用010editor随便打开一个zip文件。如图:
偏移量 | 占用字节 | 字段 | 翻译 |
---|---|---|---|
0 | 4 | Signature | 签名,Signature=0x06054b50 |
4 | 2 | DiskNumber | 当前磁盘编号 |
6 | 2 | StartDiskNumber | 核心目录开始位置的磁盘编号 |
8 | 2 | EntriesOnDisk | 核心目录数量 |
10 | 2 | EntriesInDirectory | 核心目录结构总数量 |
12 | 4 | DirectorySize | 核心目录文件大小 |
16 | 4 | DirectoryOffset | 核心目录偏移量 |
20 | 2 | CommentLength | 注释长度 |
22 | n | Comment | 注释内容 |
我们可以看到zip文件注释长度保存在zip的central director里最后2个字节,紧接着就是注释内容。
- 所以我们的工作很简单就是找到zip文件注释开始位置,前面2个字节zip文件注释长度,然后写入注释内容就可以了。
如何找到zip文件注释长度开始位置
- 根据zip的“end of central dir signature” 值0x06054b50 来查找。
具体实现
- 代码我放在github上面了,如有需要请点击php-apk-packer (喜欢的话请给一个star)
安卓读取apk注释
- 由于安卓使用zip类调用getComment()方法使用有限制( API>=19),所以我自己实现了一个读取zip注释的类,写了一个简单的安卓demo, 点击查看 read-apk-comment-demo
注:如果下载read-apk-comment-demo编译得到的apk需要手动修改apk的注释,app即可显示输入的注释内容。
安全性问题
- 如果不想被别人篡改,可以对zip注释内容进行加密。
结束语
- 最后我希望能帮到需要的人, 第一次写简书不足支持请多多指教!
- 呵呵,再打个广告, 我的个人博客。