Gradle多渠道打包
由于国内Android市场众多渠道,为了统计每个渠道的下载及其它数据统计,就需要我们针对每个渠道单独打包,如果让你打几十个市场的包岂不烦死了,不过有了Gradle,这再也不是事了。
以友盟统计为例,在AndroidManifest.xml里面会有这么一段:
1 2 3 | <meta-data android:name="UMENG_CHANNEL" android:value="Channel_ID" /> |
里面的Channel_ID就是渠道标示。我们的目标就是在编译的时候这个值能够自动变化。
- 第一步 在AndroidManifest.xml里配置PlaceHolder
1 2 3 | <meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" /> |
- 第二步 在build.gradle 设置productFlavors
1 2 3 4 5 6 7 8 9 10 11 12 | android { productFlavors { xiaomi {} _360 {} baidu {} wandoujia {} } productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } } |
然后直接执行./gradlew assembleRelease
然后就等待打包完成吧。
assemble 这个命令,会结合 Build Type 创建自己的task,如:
-
./gradlew assembleDebug
-
./gradlew assembleRelease
除此之外 assemble 还能和 Product Flavor 结合创建新的任务,其实 assemble 是和 Build Variants 一起结合使用的,而 Build Variants = Build Type + Product Flavor , 举个例子大家就明白了:
如果我们想打包wandoujia渠道的release版本,执行如下命令就好了:
./gradlew assembleWandoujiaRelease
如果我们只打wandoujia渠道版本,则:
./gradlew assembleWandoujia
此命令会生成wandoujia渠道的Release和Debug版本
同理我想打全部Release版本:
./gradlew assembleRelease
这条命令会把Product Flavor下的所有渠道的Release版本都打出来。