Walle
介紹
Walle(瓦力):Android Signature V2 Scheme簽名下的新一代渠道包打包神器。 瓦力通過在Apk
中的APK Signature Block
區塊新增自定義的渠道資訊來生成渠道包,從而提高了渠道包生成效率,可以作為單機工具來使用,也可以部署在HTTP
伺服器上來實時處理渠道包Apk
的升級網路請求。 ——來自 Walle
使用
使用Walle
生成多渠道的速度是很快的,原來的專案打一個包就需要兩分鐘多,每次釋出打7個包需要十幾分鍾。用了Walle後,7個包只要兩分鐘左右就完事了。那叫一個快...
新增依賴&配置渠道
在專案的build.gradle
檔案中新增依賴
buildscript {
dependencies {
classpath 'com.meituan.android.walle:plugin:1.1.3'
}
}
複製程式碼
在當前app
的build.gradle
檔案中新增依賴,以及配置外掛
apply plugin: 'walle'
...
dependencies {
...
compile 'com.meituan.android.walle:library:1.1.3'
}
walle {
// 指定渠道包的輸出路徑
apkOutputFolder = new File("${project.buildDir}/outputs/channels");
// 定製渠道包的APK的檔名稱
apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
// 渠道配置檔案
channelFile = new File("${project.getProjectDir()}/channel")
}
複製程式碼
對應的屬性:
-
apkOutputFolder
:指定渠道包的輸出路徑, 預設值為new File("${project.buildDir}/outputs/apk")
。這裡指定為build/outputs/apk
。 -
apkFileNameFormat
:定製渠道包的APK的檔名稱, 預設值為'${appName}-${buildType}-${channel}.apk'
。 可使用以下變數: -
projectName
- 專案名字 -
appName
-App
模組名字 -
packageName
-applicationId
(App
包名packageName
) -
buildType
-buildType
(release
/debug
等) -
channel
-channel
名稱 (對應渠道打包中的渠道名字) -
versionName
-versionName
(顯示用的版本號) -
versionCode
-versionCode
(內部版本號) -
buildTime
-buildTime
(編譯構建日期時間) -
fileSHA1
-fileSHA1
(最終APK檔案的SHA1
雜湊值) -
flavorName
- 編譯構建productFlavors
名 -
channelFile
:包含渠道配置資訊的檔案路徑 -
channelFile
:包含渠道配置資訊的檔案路徑。 在app
目錄下建立channel
檔案,用於配置渠道資訊(檔案型別:Text)
渠道配置
下面是我的配置表
Qh360 #360
Yyb #應用寶
Wdj #豌豆莢
Lenovo #聯想
Xiaomi #小米
Huawei #華為
Meizhu #魅族
獲取渠道資訊
通過以下程式碼,可以取渠道資訊
String channel = WalleChannelReader.getChannel(this.getApplicationContext());
生成渠道包
到這裡,基本的配置都已完成。接下來可以直接打包了。 在Terminal
中輸入對應的指令,即可完成打包。看到BUILD SUCCESSFUL
後說明已經完成打包了。
- 所有渠道
./gradlew clean assembleReleaseChannels
渠道包的生成目錄預設存放在 build/outputs/apk/
,也可以通過Walle
閉包中的apkOutputFolder
引數來指定輸出目錄
-
指定渠道
生成單個渠道包(huawei渠道):
./gradlew clean assembleReleaseChannels -PchannelList=huawei
生成多個渠道包(huawei、xiaomi渠道):
./gradlew clean assembleReleaseChannels -PchannelList=huawei,xiaomi
結果
執行./gradlew clean assembleReleaseChannels
後,可以在build/outputs/channels
看到對應的渠道包。
本文主要講了Walle的多渠道打包,更多強大的功能出門左拐
續Tinker
終於說到Tinker了。剛打完用來發布的渠道包,可是如果要打補丁包的話,好像還少了點什麼。用來打補丁包的材料... 一個apk
?還有對應的一個txt
檔案? 翻了下build
目錄,除了build/outputs/channels
中有我們需要釋出的渠道包,看了看bakApk
...這是什麼..不就是我們想要的補丁包材料!
有了基包後,就可以打補丁包了。接下來
我要開始裝...額...打補丁包了
打補丁包
- 配置基包
配置基包路徑
- 生成補丁包
打補丁包
- 得到結果
結果
得到補丁包後,直接去釋出就可以了。
看到這裡,你可能有個疑問。我們剛生成了那麼多渠道包,可是補丁包只有一個,這...
這個補丁包對所有的渠道包都有效! 這個補丁包對所有的渠道包都有效! 這個補丁包對所有的渠道包都有效! 是的,只要這一個補丁包就可以了,補丁釋出後所有渠道都會更新的。
你以為呢?每個渠道對應一個補丁包? 哈哈...那得多麻煩
這時候又出現另一個問題了,如果只想為指定的渠道發補丁怎麼辦?這個嘛,我現在也不是很清楚... 印象中,釋出的時候應該是可以過濾渠道的,回頭我再去看看Tinker的文件。
原始碼地址
Github(需要新增簽名)