標籤:
需求
國內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] } }
ok, 搞定,幾行代碼自動產生對應渠道的apk。 其實是將Manifest中的 UMENG_CHANNEL_VALUE替換成了flavorbuild的name
可以看到每個flavor裡面的代碼一樣,比較囉嗦,還能在簡化下,
productFlavors { wandoujia{ } google_play{ } } productFlavors.all { flavor -> flavor.manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name ] }
一個迴圈搞定~
-------------------------------------------------------------------------------------------------------------------------------
原文章地址:http://devyang.com/blog/2014/11/03/android-gradle-duo-qu-dao-da-bao-pei-zhi/
AndroidGradle --多渠道打包配置(轉寄)