美文网首页PHPPHP实战PHP经验分享
使用PHP进行APK渠道打包

使用PHP进行APK渠道打包

作者: 臣孓 | 来源:发表于2016-12-19 23:33 被阅读2173次

    渠道打包的意义

    当我们发布安卓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注释内容进行加密。

    结束语

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

    相关文章

      网友评论

      • 烟灰弹到DD上丶:刚好碰到一个需要读渠道码的需求 下午试试
      • 6beefe1c1815:您好,突然想起来,现在很多手机安装完APP后,会提示是否删除APP安装包(例 华为),如果用户点了是, 那再获取apk的注释 那估计获取不到了吧? (我没测试过,希望您能帮忙测试下)

        我现在还是使用apktool拆包,然后修改AndroidManifestx.xml中渠道号,然后再打包,签名。
        Android_大船:好像安装过的apk都在data/app/<package>.apk有备份的。
        01aa64836d6d:你好 这个php代码执行不行啊 我从网上看了 https://blog.skyx.in/archives/319/ 安装后闪退,资源乱码
        臣孓:@旭森 应该是获取不到的,我这里没有遇到过提示删除安装包的情况,所以没法测试。apk解包修改渠道号不适合后台批量打包。
      • 6beefe1c1815:您好,使用您的php代码修改了后,安装apk,无法安装
      • 1c808f27fc49:那么app怎么去读取自身安装包的注释呢?
        臣孓:@shellus 目前还没有具体的代码,android可以通过getApplicationContext().getPackageResourcePath()获取当前程序的安装包路径。 目前有两种办法可以获取apk的注释 1.使用ZipFile的getComment方法(minSdkVersion=19) 2.自己编写获取apk文件注释的方法。后续我计划写一个安卓读取comment的项目,尽请关注。
        1c808f27fc49:@臣孓 有具体的代码吗?app如何知道自己的安装包路径?
        臣孓:@shellus apk安装后会保留安装包的,java可以读取这个apk的注释。
      • Dorm_Script:加油
        臣孓:@Dorm_Script 谢谢!

      本文标题:使用PHP进行APK渠道打包

      本文链接:https://www.haomeiwen.com/subject/gdxxvttx.html