
http://devyang.me/blog/2014/11/03/android-gradle-du-qu-dao-da-bao-pei-zhi/
国内Android app发布一般会有多个渠道,为了跟踪发展情况,通常会为每一个渠道定制一个特别的apk。
一般友盟之类第三方统计的渠道ID定义如下,以wandoujia为例
<meta-data android:name="UMENG_CHANNEL" android:value="wandoujia" /> 如果不使用第三方统计,自己也可以在AndroidManifest.xml中定义类似meta-data
如果每个渠道都手工修改,打包,10几个渠道下来
还是自动化来得方便
Gradle Android Plugin 0.10 新增了Manifest Merger
For custom placeholders replacements, use the following DSL to configure the placeholders values :
android { defaultConfig { manifestPlaceholders = [ activityLabel:"defaultName"] } productFlavors { free { } pro { manifestPlaceholders = [ activityLabel:"proName" ] } } } Manifest Merger 可以替换Manifest中对应key的值
所以,可以利用Product flavor + manifestPlaceholder 来替换对应渠道的key
假如我们有wandoujia, Google Play, 两个渠道,可以这么写
AndroidManifest.xml
<meta-data android:name="UMENG_CHANNEL" android:value="$[CHANNEL_KET]" /> build.gradle
productFlavors { wandoujia{ manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name] } google_play{ manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name] } } 几行代码自动生成对应渠道的apk。 其实是将Manifest中的
UMENG_CHANNEL_VALUE替换成了flavorbuild的name
可以看到每个flavor里面的代码一样,比较嗦,还能在简化下,
productFlavors { wandoujia{ } google_play{ } } productFlavors.all { flavor -> flavor.manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name ] } 一个循环搞定~
1 xcv58 2014-11-04 01:36:52 +08:00 挺好的。 |
2 ufo22940268 2014-11-04 05:55:38 +08:00 via Android 速度快吗,打包几十个渠道要多少时间 |
3 seathink OP @ufo22940268 速度不错。比手工打速度快多了。你可以在现有工程上试下,添几行代码就可以了 |
4 holmesabc 2014-11-04 11:42:58 +08:00 自己用python写了个自动打包的, 以兼容公司的多种渠道需求. 原理用python改manifest,gradle打包。 |
6 up76733 2014-11-07 09:02:52 +08:00 via Android 挺好用的,谢谢 |