Android多渠道打包两种方式(带秒速打包)

多渠道打包,主要是为了统计不同的渠道上包的下载数量,统计可以用umeng统计或者mta统计,本文用的是mta统计。
其实多渠道打包的实现与统计是没有关系的,多渠道打包与统计之间的关系是我们要把String类型的渠道号交给统计。例如mta统计里

           StatConfig.setInstallChannel(MTA);//设置apk渠道信息

用这行代码把渠道号交给mta统计。
抛开多渠道打包来说,我们完全可以直接StatConfig.setInstallChannel("渠道号");//设置apk渠道信息
这样设置,但是如果这样来做,我们就需要改一个渠道号打包一个apk,重复操作,何必把自己当作机器呢?让AS一次性把所有渠道打包好就好的啦!

  1. 由此引出第一种方式,利用manifest和gradle来处理
    (1)manifest文件里配置
    <meta-data
    android:name="XXXX"
    android:value="${CHANNEL_VALUE}" />

    (2)gradle文件里配置
android {
    //配置keystore签名
    signingConfigs {
        debug {
            // No debug config
        }
        staging {
            // No staging config
        }
        release {
            storeFile file("xxxxxx.jks")
            storePassword "xxxxxx"
            keyAlias "xxxxxxxx"
            keyPassword "xxxxxx"
        }
    }

    buildTypes {
        debug {
        }
        staging {
        }
        release {
            signingConfig signingConfigs.release
            //配置apk名字格式
                    }
                }
            }
        }
    }

    // 多渠道打包
    productFlavors {
        "渠道名字" {}
    }
//下面代码会用上面的这些flavor的name属性去替换manifest文件里的CHANNEL_VALUE值。
    productFlavors.all { flavor ->
        flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
    }
}

(3)把各渠道号交给统计

            StatConfig.setInstallChannel("渠道");

(4)在AS的terminal里输入 ./gradlew assembleRelease,坐等all apk

总结:**此种方式的缺点就是打包忒慢,15个包得打10min,因为这种打包方式需要修改manifest 文件中<meta-data
android:name="CHANNEL"
android:value="${CHANNEL_VALUE}"/>

的value值, 然后继续签名 ,因此耗时。每打一次apk包都需要构建一次**

2. 时间就是金钱嘛,由此引出第二种秒速打包(还没开始就会结束)https://github.com/GavinCT/AndroidMultiChannelBuildTool

(1) 拷贝ChannelUtil.java到项目中。
(2) 代码中通过 ChannelUtil.getChannel(this)方法获取渠道号并交给统计StatConfig.setInstallChannel(ChannelUtil.getChannel(this));。
(3) ..PythonTool\info\channel.txt,里面去添加自己想要的渠道。
(4) 生成一个原生apk并放置apk到MultiChannelBuildTool.py所在目录,与脚本同级目录,终端cd到脚本所在目录,执行python MultiChannelBuildTool.py执行脚本,完成多渠道打包。

总结:这种打包方式能直接修改apk的渠道号,不需要再重新签名,思路:直接解压apk,解压后的根目录会有一个META-INF目录,在META-INF目录内添加空文件,可以不用重新签名应用,因此,通过为不同渠道的应用添加不同的空文件,可以唯一标识一个渠道。1、python代码用来给apk添加空的渠道文件,文件名即渠道名2、Java代码中读取空渠道文件名。3、把渠道名交给统计。这样,每打一个渠道包只需复制一个apk,在META-INF中添加一个使用渠道号命名的空文件即可。


*在Android 7.0(Nougat)推出了新的应用签名方案APK Signature Scheme v2后,之前快速生成渠道包的方式(美团Android自动化之旅—生成渠道包)已经行不通了,使用美团的WALLE
https://zhuanlan.zhihu.com/p/24920734?refer=c_63840855*


参考:https://github.com/GavinCT/AndroidMultiChannelBuildTool
http://tech.meituan.com/mt-apk-packaging.html
http://gold.xitu.io/entry/577383c66be3ff006adc92a3
http://blog.csdn.net/u011733020/article/details/51175635

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值