最近一直用android studio
進(jìn)行開發(fā),在開發(fā)和發(fā)版的時候团驱,遇到一個多渠道打包的問題摸吠,由于公司里是有七個渠道的包進(jìn)行分發(fā),由于每次去AndroidManifest.xml
修改渠道的值嚎花,甚是麻煩寸痢。。紊选。
最后去google了一番啼止,發(fā)現(xiàn)有些方法,是在gradle文件里切換各種不同的AndroidManifest.xml
文件兵罢,感覺這樣也太麻煩些了献烦。。趣些。后面搜索了些仿荆,發(fā)些大家寫得都差不多,發(fā)現(xiàn)一個在gradle
利用manifestPlaceholders
這個屬性來替換渠道值的方法坏平,但我按照這個方法拢操,沒有成功,我就去扒官方的文檔才徹底搞定舶替。下面就講講怎么實現(xiàn)的吧令境。
一般用渠道的統(tǒng)計無非是用友盟或者其它之類的,今天就以友盟的為例吧顾瞪。
渠道信息一般在 AndroidManifest.xml
中修改以下值:
<meta–data android:name="UMENG_CHANNEL" android:value="wandoujia" />
首先你必須在AndroidManifest.xml
中的meta-data
修改以下的樣子:
<meta–data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
其中${UMENG_CHANNEL_VALUE}
中的值就是你在gradle
中自定義配置的值舔庶。
build.gradle
文件就利用productFlavors
這樣寫:
productFlavors {
wandoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
baidu {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
}
c360 {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "c360"]
}
uc {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "uc"]
}
}
其中[UMENG_CHANNEL_VALUE: "wandoujia"]
就是對應(yīng)${UMENG_CHANNEL_VALUE}
的值。
最新更新
后來發(fā)現(xiàn)上面的重復(fù)代碼太多陈醒,就在網(wǎng)上又發(fā)現(xiàn)了一個更簡潔的寫法
productFlavors {
wandoujia {}
baidu {}
c360 {}
uc {}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
其中name
的值對相對應(yīng)各個productFlavors
的選項值惕橙,這樣就達(dá)到自動替換渠道值的目的了。
這樣生成apk時钉跷,選擇相應(yīng)的Flavors
來生成指定渠道的包就可以了弥鹦,而且生成的apk會自動幫你加上相應(yīng)渠道的后綴,非常方便和直觀。大家可以自己反編譯驗證彬坏。
一次生成所有渠道包
在android studio
底欄中有個命令行工具Terminal
,
打開后就CMD可以自動切換到當(dāng)前項目的目錄下朦促。
有的項目下會有g(shù)raldew.bat這個文件,你就可以輸入這個命令:
gradlew assembleRelease
就可以一次性生成所有的渠道包了
不過我一般不建議大家使用這個命令栓始,gradlew這個命令的gralde的版本無法控制务冕,有時候會莫名其妙的下載老版本的gradle
所以我個人推薦大家使用以下的用法。
先找到gralde
的根目錄幻赚,在系統(tǒng)變量里添加兩個環(huán)境變量:
變量名為:GRADLE_HOME
禀忆,變量值就為gradle
的根目錄;
所以變量值為:C:\Users\yazhou\.gradle\wrapper\dists\gradle-2.1-all\27drb4udbjf4k88eh2ffdc0n55\gradle-2.1
還有一個在系統(tǒng)變量里PATH
里面添加gradle
的bin
目錄
我的就是C:\Users\yazhou\.gradle\wrapper\dists\gradle-2.1-all\27drb4udbjf4k88eh2ffdc0n55\gradle-2.1\bin
這里配置完成了落恼,接著在Terminal
中敲下 gradle assembleRelease
就可以一次性生成所有的渠道包了油湖。
所有生成的apk在項目的build\outputs\apk
下。
如果只是想生成單個渠道的包呢领跛?
打開Android Studio
的Gradle tasks
面板(右邊側(cè)邊欄),會發(fā)現(xiàn)模塊多了很多任務(wù)撤奸,如下圖所示吠昭。
此時可以直接雙擊該任務(wù)生成對應(yīng)的apk,也可以用命令行單獨生成胧瓜,比如
gradle assembleWandoujiaRelease
多渠道打包從此就非呈概铮快捷了,今天就寫到這里府喳,以后Android studio有相應(yīng)的tips還是會分享給大家蒲肋。
參考文檔:http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger
http://www.cnblogs.com/shanpow/p/4097320.html