我們都知道國內(nèi)應(yīng)用市場非常多企蹭,為了統(tǒng)計各個應(yīng)用市場的app下載量和使用情況,我們需要多渠道的打包预明。如果一個一個的手動去打包豈不煩死了贸铜,要多麻煩就有多麻煩。這就要求我們學(xué)會使用Gradle進行多渠道打包孽查。廢話不多說了饥悴,直接進入正題吧!
第一步:配置AndroidManifest.xml
以友盟渠道為例盲再,渠道信息一般都是寫在 AndroidManifest.xml文件中西设,大約如下:
如果不使用多渠道打包方法,那就需要我們手動一個一個去修改value中的值答朋,xiaomi贷揽,360,qq梦碗,wandoujia等等禽绪。
使用多渠道打包的方式,就需要把上面的value配置成下面的方式:
其中${UMENG_CHANNEL_VALUE}中的值就是你在gradle中自定義配置的值洪规。
第二步: 在build.gradle設(shè)置productFlavors
productFlavors {
? ? wandoujia {
? ? ? ? ?manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
? ? }
? ? xiaomi{
? ? ? ? ?manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
? ? }
? ? qq {
? ? ? ? ?manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qq"]
? ? }
? ? _360 {
? ? ? ? ?manifestPlaceholders = [UMENG_CHANNEL_VALUE: "360"]
? ? }
}
其中[UMENG_CHANNEL_VALUE: “wandoujia”]就是對應(yīng)${UMENG_CHANNEL_VALUE}的值印屁。
我們可以發(fā)現(xiàn),按照上面的方式寫斩例,比較繁瑣雄人,其實還有更簡潔的方式去寫,方法如下:
android {
? ?productFlavors {
? ? ? ?wandoujia{}
? ? ? ?xiaomi{}
? ? ? ?qq{}
? ? ? ?_360 {}
? ?}
? ?productFlavors.all {
? ? ? ?flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
? ? ? ?}
}
其中name的值對相對應(yīng)各個productFlavors的選項值念赶,這樣就達到自動替換渠道值的目的了柠衍。
這樣生成apk時,選擇相應(yīng)的Flavors來生成指定渠道的包就可以了晶乔,而且生成的apk會自動幫你加上相應(yīng)渠道的后綴,非常方便和直觀牺勾。大家可以自己反編譯驗證正罢。
第三步:一次生成所有渠道包
我們可以使用CMD命令,進入到項目所在的目錄驻民,直接輸入命令:
gradle assembleRelease
就開始打包了翻具,如果渠道很多的話,時間可能會很長回还。
或者裆泳,當(dāng)然Android Studio中的下方底欄中有個命令行工具Terminal,你也可以直接打開柠硕,輸入上面的命令:
gradle assembleRelease
用CMD進入到項目所在目錄執(zhí)行工禾,或者用AS中自帶的命令行工具Terminal其實性質(zhì)都是一樣的运提。
注意:如果沒有對gradle配置的話,可能輸入上面的命令闻葵,會提示“不是內(nèi)部或者外部命令”民泵,不要著急,我們只需要找到gradle的目錄槽畔,把它配置到電腦中的環(huán)境變量中去即可栈妆。
配置方式如下:
先找到gralde的根目錄,在系統(tǒng)變量里添加兩個環(huán)境變量:
變量名為:GRADLE_HOME厢钧,變量值就為gradle的根目錄鳞尔;
所以變量值為:D:\android\android-studio-ide-143.2739321-windows\android-studio\gradle\gradle-2.10
還有一個在系統(tǒng)變量里PATH里面添加gradle的bin目錄
我的就是D:\android\android-studio-ide-143.2739321-windows\android-studio\gradle\gradle-2.10\bin
這樣就配置完了,不信趕緊去試試早直,執(zhí)行以下這個命令:gradle assembleRelease寥假。是不是可以了。
第四步:如果要帶簽名的話莽鸿,就得在build.gradle進行相關(guān)簽名的配置
//簽名
signingConfigs{
? ? release {
? ? ? ? ?storeFile file("keystore路徑")
? ? ? ? ?storePassword "***"
? ? ? ? ?keyAlias "***"
? ? ? ? ?keyPassword "***"
? ? }
}
buildTypes {
? ? ? ?release {
? ? ? ? ? ?runProguard false
? ? ? ? ? ?proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
? ? ? ? ? ?signingConfig signingConfigs.release
? ? ? ?}
? ?}
第五步:修改導(dǎo)出包的apk名稱
我們打包有非常多的渠道包昧旨,所以我們可以根據(jù)渠道自定義apk的名稱,方便運營人員看嘛祥得,知道哪個apk對應(yīng)的哪個渠道嘛兔沃。
android {
? ?applicationVariants.all { variant ->
? ? ? ?variant.outputs.each { output ->
? ? ? ? ? ?output.outputFile = new File(
? ? ? ? ? ? ? ? ? ?output.outputFile.parent,
? ? ? ? ? ? ? ? ? ?"xxxx(apk的名字)-${variant.buildType.name}-${defaultConfig.versionName}-${variant.productFlavors[0].name}.apk".toLowerCase())
? ? ? ?}
? ?}
}
最后打包完成之后,apk文件就會生成在項目的build\outputs\apk下级及。?