Android Studio Gradle 多渠道打包
來源:程序員人生 發布時間:2015-01-04 08:59:44 閱讀次數:3864次
之前集成UMeng提供的1些服務時接觸過量渠道打包,UMeng要根據各利用市場渠道號來進行1些統計和分析,比如各渠道的下載數、活躍度、自動更新等等。UMeng提供了1個打包工具(這里),但官方很久沒有更新了,自己也切換到Android
Studio IDE上,Gradle插件可以很好的實現多渠道打包的需求。
多渠道打包的大概思想是(針對UMeng): 動態的更改AndroidManifest.xml文件中的1個屬性值(渠道號),從而來標識不同的渠道。
Gradle的Product flavors特性(這里)可以很方便的實現功能,簡單的說下實現方式:不同的flavor指定不同渠道的AndroidManifest.xml文件。這類方式有很大的弊端,重復性工作太多了,只為了更改其中的1個屬性而要保護太多的AndroidManifest.xml文件??上驳氖茿ndroid
Studio 1.0 提供了更強大的Manifest Merger(這里)功能,其中的Placehodler Support(這里)特性可以大大的簡化上面的做法,不需要再保護這么多的AndroidManifest.xml文件了!但把所有的渠道都配置在build.gradle文件中畢竟不好保護(利用市場多達幾10個),下面主要介紹通進程序的方式來讀取配置文件,生成不同的渠道包。
通進程序的方式也要借助于Placehodler Support特性,所以Android Studio請升級到1.0以上。
具體的思路是通過讀取配置文件中的渠道號來動態的生成build type。具體的代碼以下:
// 多渠道打包
def channels() {
if (project.hasProperty("channel")) {
// 渠道號配置文件路徑
def path = "./build-types/channels.txt"
file(path).eachLine { line ->
if(!line.startsWith("//")){ //剔除注釋行
android.buildTypes.create(line, {
manifestPlaceholders = [ channel:line ]
})
}
}
}
}
AndroidManifest.xml文件更改以下:
<?xml version="1.0" encoding="utf⑻"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tubb.cityindex" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.tubb.cityindex.CitySelectorActivity"
android:label="@string/app_name" >
<intent-filter><meta-data android:name="UMENG_CHANNEL" android:value="${channel}"/>
</application>
</manifest>
最后只需要在工程app目錄下現在build-types文件夾添加channels配置文件
// 百度利用市場
baidu
// 360利用市場
m360
測試代碼托管在(這里),歡迎大伙來討論~~
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈