http://devyang.me/blog/2014/11/03/android-gradle-duo-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
挺好用的,谢谢
|