为什么要分渠道打包
渠道打包的目的是为了针对不同的市场,做一些统计,数据分析。来看下Umeng统计是怎么说的。
友盟帮助移动应用开发商统计和分析流量来源、内容使用、用户属性和行为数据,以便开发商利用数据进行产品、运营、推广策略的决策。接着,再来看看百度移动统计。
如何多渠道打包
接下来介绍2中多渠道打包的方法。
- Android Studio多渠道打包方法。
以Umeng统计为例,具体怎么集成就不说了,看Umeng官方文档。Umeng
在配置文件中配置
<meta-data android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}"/>
注意:该配置和4大组件同级。
接着,在gradle脚本中添加如下代码。
productFlavors {
baidu {
}
wandoujia {
}
xiaomi {
}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
注意flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name],这里的要和配置文件中的value一致。一般来说,这样就可以了。Build->generate signed apk,等待便可生成签名的渠道包。生成的渠道包在build->outputs->apk目录下。或者,我们也可以在AS自带的 Terminal中,./gradlew assembleRelease(MAC版命令) 生成渠道包。或者,我们还可以右侧Gradle->Tasks->build下生成对应的渠道包。(ps:这是没签名的)。如图
。我们来看看生成的包吧。在这里我并没有签名。
。
呀,名字看起来很长啊,有办法变得明显一点么。答案是有的。在gradle脚本的buildTypes下添加如下代码。
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 输出apk名称为boohee_v1.0_2015-01-15_wandoujia.apk
def fileName = "${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
上面的代码将apk文件重命名为渠道包名称。
接下来在代码中通过
String channel=AppUtil.getMetaValue(this,"CHANNEL_NAME");
来获取渠道名。
额,多的不多说了,这个不是重点,感兴趣的去看这2位大神。我的这些东西是模仿他们的。
stormzhang
Android弟
上面的多渠道打包方法每生成一个渠道包都要重新打包,可想而知,当渠道多的飞起的时候,这种方案也会慢的飞起。那么,就来介绍另一种方案。
那篇文章介绍了原理,这里我再简单的说下。就是在META-INF文件夹下,插入一个代表渠道的空文件。然后在java带按摩中获取文件名来当做渠道名。
这个工具非常简单。只需要将apk文件放到PythonTool目录下。
在终端,
,
即可生成。好了,你们也快去试试吧。
参考: