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 ]
}
一个循环搞定~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.