使用PHP进行APK渠道打包

渠道打包的意义

当我们发布安卓app投放到应用宝、安卓市场等渠道的时候,需要区分各个渠道的统计支付、登陆、充值数据的时候,这就需要对app进行渠道标识及对apk进行打包。

常见打包方法和工具

  • 编写app代码的时候把渠道号写入AndroidManifestx.xml
  • 使用apktool工具反编译apk后把渠道号写入AndroidManifestx.xml
  • apk其实就是zip文件,解压apk向META-INF文件夹写入渠道号文件,不会对签名产生影响
  • 把渠道号写入zip注释里面,目前各大公司都是使用的这种方法,包括腾讯(强烈推荐)

怎样写入渠道号

  • 首先我们来了解一下zip文件格式,我们使用010editor随便打开一个zip文件。如图:
zip.png
偏移量 占用字节 字段 翻译
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注释内容进行加密。

结束语

  • 最后我希望能帮到需要的人, 第一次写简书不足支持请多多指教!
  • 呵呵,再打个广告, 我的个人博客

推荐阅读更多精彩内容