Android使用Walle實(shí)現(xiàn)多渠道打包功能
介紹
Walle(瓦力)是Android Signature V2 Scheme簽名下的新一代渠道包打包神器。
瓦力通過(guò)在Apk中的APK Signature Block區(qū)塊添加自定義的渠道信息來(lái)生成渠道包,從而提高了渠道包生成效率,可以作為單機(jī)工具來(lái)使用,也可以部署在HTTP服務(wù)器上來(lái)實(shí)時(shí)處理渠道包Apk的升級(jí)網(wǎng)絡(luò)請(qǐng)求。
使用
使用Walle生成多渠道的速度是很快的,原來(lái)的項(xiàng)目打一個(gè)包就需要兩分鐘多,每次發(fā)布打7個(gè)包需要十幾分鐘。用了Walle后,7個(gè)包只要兩分鐘左右就完事了。那叫一個(gè)快…
添加依賴(lài)&配置渠道,在項(xiàng)目的build.gradle文件中添加依賴(lài):
buildscript {dependencies {classpath 'com.meituan.android.walle:plugin:1.1.3'}}
在當(dāng)前app的build.gradle 文件中添加依賴(lài),以及配置插件
apply plugin: 'walle'...dependencies {...compile 'com.meituan.android.walle:library:1.1.3'}walle {// 指定渠道包的輸出路徑apkOutputFolder = new File("${project.buildDir}/outputs/channels");// 定制渠道包的APK的文件名稱(chēng)apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';// 渠道配置文件channelFile = new File("${project.getProjectDir()}/channel")}
對(duì)應(yīng)的屬性:
apkOutputFolder:指定渠道包的輸出路徑, 默認(rèn)值為:
new File(“${project.buildDir}/outputs/apk”)這里指定為build/outputs/apk。
apkFileNameFormat:定制渠道包的APK的文件名稱(chēng), 默認(rèn)值為:
’appName?appName?{buildType}-${channel}.apk’
可使用以下變量:
projectName - 項(xiàng)目名字
appName - App模塊名字
packageName - applicationId (App包名packageName)
buildType - buildType (release/debug等)
channel - channel名稱(chēng) (對(duì)應(yīng)渠道打包中的渠道名字)
versionName - versionName (顯示用的版本號(hào))
versionCode - versionCode (內(nèi)部版本號(hào))
buildTime - buildTime (編譯構(gòu)建日期時(shí)間)
fileSHA1 - fileSHA1 (最終APK文件的SHA1哈希值)
flavorName - 編譯構(gòu)建 productFlavors 名
channelFile:包含渠道配置信息的文件路徑
channelFile:包含渠道配置信息的文件路徑。
在app目錄下創(chuàng)建channel文件,用于配置渠道信息(文件類(lèi)型:Text)

下面是我的配置表
Qh360 #360Yyb #應(yīng)用寶Wdj #豌豆莢Lenovo #聯(lián)想Xiaomi #小米Huawei #華為Meizhu #魅族
獲取渠道信息,通過(guò)以下代碼,可以取渠道信息:
String channel = WalleChannelReader.getChannel(this.getApplicationContext());生成渠道包,到這里,基本的配置都已完成。接下來(lái)可以直接打包了。
在Terminal中輸入對(duì)應(yīng)的指令,即可完成打包??吹紹UILD SUCCESSFUL后說(shuō)明已經(jīng)完成打包了。

所有渠道
./gradlew clean assembleReleaseChannels渠道包的生成目錄默認(rèn)存放在 build/outputs/apk/,也可以通過(guò)Walle閉包中的apkOutputFolder參數(shù)來(lái)指定輸出目錄。
指定渠道
生成單個(gè)渠道包(huawei渠道):
./gradlew clean assembleReleaseChannels -PchannelList=huawei生成多個(gè)渠道包(huawei、xiaomi渠道):
./gradlew clean assembleReleaseChannels -PchannelList=huawei,xiaomi結(jié)果,運(yùn)行
./gradlew clean assembleReleaseChannels后,可以在build/outputs/channels看到對(duì)應(yīng)的渠道包。

到這里就介紹完啦.
