項目地址
https://github.com/Meituan-Dianping/walle
Gradle插件方式
配置build.gradle
在位于項目的根目錄build.gradle文件中添加Walle Gradle插件的依賴瞎饲, 如下:
????????? buildscript {
? ? ? ? ? ? ? ?? dependencies {
???????????????? ? ? ? classpath'com.meituan.android.walle:plugin:1.0.3'
?????????? }}
并在當(dāng)前App的build.gradle文件中apply這個插件宰译,并添加上用于讀取渠道號的AAR
???????????? applyplugin:'walle'
???????????? dependencies {
?????????????????????? compile'com.meituan.android.walle:library:1.0.3'
????????????? }
配置插件
??????? walle {
???????????????? //指定渠道包的輸出路徑
??????????????? apkOutputFolder=newFile("${project.buildDir}/outputs/channels");
???????????????? //定制渠道包的APK的文件名稱
???????????????? apkFileNameFormat='${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
???????????????? //渠道配置文件
???????????????? channelFile=newFile("${project.getProjectDir()}/channel");
??????????? }
?配置項具體解釋:
apkOutputFolder:指定渠道包的輸出路徑惶傻, 默認(rèn)值為new File("${project.buildDir}/outputs/apk")
apkFileNameFormat:定制渠道包的APK的文件名稱, 默認(rèn)值為'${appName}-${buildType}-${channel}.apk'
可使用以下變量:
???????????? projectName - 項目名字
???????????? appName - App模塊名字
???????????? packageName - applicationId (App包名packageName)
???????????? buildType - buildType (release/debug等)
???????????? channel - channel名稱 (對應(yīng)渠道打包中的渠道名字)
???????????? versionName - versionName (顯示用的版本號)
???????????? versionCode - versionCode (內(nèi)部版本號)
???????????? buildTime - buildTime (編譯構(gòu)建日期時間)
???????????? fileSHA1 - fileSHA1 (最終APK文件的SHA1哈希值)
???????????? flavorName - 編譯構(gòu)建 productFlavors 名
???????????? channelFile:包含渠道配置信息的文件路徑判导。
如何獲取渠道信息
在需要渠道等信息時可以通過下面代碼進(jìn)行獲取
Stringchannel=WalleChannelReader.getChannel(this.getApplicationContext());
如何生成渠道包
生成渠道包的方式是和assemble${variantName}Channels指令結(jié)合,渠道包的生成目錄默認(rèn)存放在build/outputs/apk/,也可以通過walle閉包中的apkOutputFolder參數(shù)來指定輸出目錄
用法示例:
生成渠道包./gradlew clean assembleReleaseChannels
支持 productFlavors./gradlew clean assembleMeituanReleaseChannels
插入額外信息
channelFile只支持渠道寫入,如果想插入除渠道以外的其他信息,請在walle配置中使用configFile
walle {
// 渠道&額外信息配置文件秘遏,與channelFile互斥
configFile = new File("${project.getProjectDir()}/config.json")
}
configFile是包含渠道信息和額外信息的配置文件路徑。
配置文件采用json格式嘉竟,支持為每個channel單獨配置額外的寫入信息邦危。
注意:
此配置項與channelFile功能互斥,開發(fā)者在使用時選擇其一即可舍扰,兩者都存在時configFile優(yōu)先執(zhí)行倦蚪。
extraInfo 不要出現(xiàn)以channel為key的情況
而對應(yīng)的渠道信息獲取方式如下:
ChannelInfochannelInfo=WalleChannelReader.getChannelInfo(this.getApplicationContext());
?if(channelInfo!=null) {
? ? ?? Stringchannel=channelInfo.getChannel();MapextraInfo=channelInfo.getExtraInfo();
? }
//或者也可以直接根據(jù)key獲取
Stringvalue=WalleChannelReader.get(context,"buildtime");
臨時生成某渠道包
我們推薦使用channelFile/configFile配置來生成渠道包,但有時也可能有臨時生成渠道包需求边苹,這時可以使用:
生成單個渠道包:./gradlew clean assembleReleaseChannels -PchannelList=meituan
生成多個渠道包:./gradlew clean assembleReleaseChannels -PchannelList=meituan,dianping
生成渠道包&寫入額外信息:
./gradlew clean assembleReleaseChannels -PchannelList=meituan -PextraInfo=buildtime:20161212,hash:xxxxxxx
注意: 這里的extraInfo以key:value形式提供陵且,多個以,分隔。
使用臨時channelFile生成渠道包:./gradlew clean assembleReleaseChannels -PchannelFile=/Users/xx/Documents/channel
使用臨時configFile生成渠道包:./gradlew clean assembleReleaseChannels -PconfigFile=/Users/xx/Documents/config.json
使用上述-P參數(shù)后个束,本次打包channelFile/configFile配置將會失效慕购,其他配置仍然有效。-PchannelList,-PchannelFile,-PconfigFile三者不可同時使用茬底。
命令行工具使用方式
需要jar包沪悲,CheckAndroidV2Signature.jar 下載鏈接:https://github.com/bihe0832/AndroidGetAPKInfo/blob/master/CheckAndroidV2Signature.jar
下載walle-cli-all.jar文件:https://github.com/Meituan-Dianping/walle/blob/master/walle-cli/walle-cli-all.jar
獲取信息
顯示當(dāng)前apk中的渠道和額外信息:
java -jar walle-cli-all.jar show /Users/Meituan/app/build/outputs/apk/app.apk
寫入信息
寫入渠道
java -jar walle-cli-all.jar put -c meituan /Users/Meituan/Downloads/app.apk
寫入額外信息,不提供渠道時不寫入渠道
java -jar walle-cli-all.jar put -c meituan -e buildtime=20161212,hash=xxxxxxx /Users/xxx/Downloads/app.apk
指定輸出文件阱表,自定義名稱殿如。 不指定時默認(rèn)與原apk包同目錄贡珊。
java -jar walle-cli-all.jar put -c meituan /Users/Meituan/Downloads/app.apk /Users/xxx/Downloads/app-new-hahha.apk
批量寫入
命令行指定渠道列表
java -jar walle-cli-all.jar batch -c meituan,meituan2,meituan3 /Users/walle/app/build/outputs/apk/app.apk
指定渠道配置文件
java -jar walle-cli-all.jar batch -f /Users/Meituan/walle/app/channel? /Users/Meituan/walle/app/build/outputs/apk/app.apk
輸出目錄可指定,不指定時默認(rèn)在原apk包同目錄下涉馁。
指定渠道&額外信息配置文件
java -jar walle-cli-all.jar batch2 -f /Users/Meituan/walle/app/config.json? /Users/Meituan/walle/app/build/outputs/apk/app.apk
輸出目錄可指定门岔,不指定時默認(rèn)在原apk包同目錄下。
更多用法
獲取cli所有功能
java -jar walle-cli-all.jar -h