熱修復框架Tinker最完整講解(02)——加入Walle多渠道打包


轉載請注明出處:http://blog.csdn.net/Alpha58/article/details/74906630

前言

上一篇文章 熱修復框架Tinker最完整講解(01)——集成之路 已經介紹我們的項目渠道包有20個,並且我們多渠道打包是采用productFlavors實現的。但是這種多渠道打包會造成20個渠道包的熱更新就需要20個補丁,這樣肯定是不合理的。那怎樣才能實現20個渠道包只需要一個補丁包呢?Tinker官方也說了,推薦我們多渠道打包使用Walle,這樣就能實現多個渠道包只使用一個補丁包了!

什么是Walle?

Walle(瓦力):Android Signature V2 Scheme簽名下的新一代渠道包打包神器。
瓦力通過在Apk中的APK Signature Block區塊添加自定義的渠道信息來生成渠道包,從而提高了渠道包生成效率,可以作為單機工具來使用,也可以部署在HTTP服務器上來實時處理渠道包Apk的升級網絡請求。
——介紹來自Walle

集成

為了方便大家的使用,Walle提供了2種使用方式:(這里主要講常用的第一種方式)

  • Gradle插件方式,方便快速集成
  • 命令行方式,最大化滿足各種自定義需求

配置build.gradle

1,在項目的build.gradle 文件中添加Walle Gradle插件的依賴, 如下

buildscript {
dependencies {
classpath 'com.meituan.android.walle:plugin:1.1.4'
}

}

2,在app的 build.gradle 文件中apply這個插件,並添加上用於讀取渠道號的AAR,如下:

apply plugin: 'walle'

dependencies {
compile 'com.meituan.android.walle:library:1.1.4'
}

3,在app的 build.gradle 文件中配置插件,如下:

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")

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:包含渠道配置信息的文件路徑:

在app目錄下新建名為channel的文件,如圖

這里寫圖片描述

在該文件里寫上需要打包的渠道號(渠道號支持使用#號添加注釋。具體內容格式詳見下圖,這里只測試2個渠道)

這里寫圖片描述

相關API和命令

獲取渠道信息

在需要渠道等信息時可以通過下面代碼進行獲取

String channel = WalleChannelReader.getChannel(this.getApplicationContext());

生成渠道包

生成渠道包的方式是和assemble${variantName}Channels指令結合,渠道包的生成目錄默認存放在 build/outputs/apk/,也可以通過walle閉包中的apkOutputFolder參數來指定輸出目錄

生成渠道包 ./gradlew clean assembleReleaseChannels

更多API和命令可參考 更多用法

使用

在Android Studio的Terminal中輸入命令gradlew clean assembleReleaseChannels進行多渠道打包,當運行完成會出現BUILD SUCCESSFUL, 如圖:

這里寫圖片描述

並且會在channels文件夾中生成所有渠道的apk,如圖:
這里寫圖片描述

一一對應關系為:
這里寫圖片描述

Tinker與Walle在真實項目中的使用流程

上一篇文章 熱修復框架Tinker最完整講解(01)——集成之路 主要修復的是單個渠道包,這里結合Walle修復多個渠道包。

發布版本流程

1,我們在發布版本的時候都需要改版本號,因為我這里使用版本名稱作為tinkerId,所以發布版本修改版本名稱的時候,tinkerId也要跟着修改。(tinkerId主要作用是當前打出的補丁包是基於哪個版本的apk, tinkerId的選取見我下一篇文章 熱修復框架Tinker最完整講解(03)——使用Tinker常見問題)

這里寫圖片描述

2, 檢查app build中是否開啟了熱修復功能, 即tinkerEnabled需要設置為true。如圖:
這里寫圖片描述

3,打包前先建一個當前版本的分支!!!(熱更新修復bug就在該分支上修改)

4,在AS的Terminal中輸入命令gradlew clean assembleReleaseChannels進行多渠道打包
命令行運行完成會在channels文件夾中生成所有渠道的apk, 如圖:
這里寫圖片描述

5,同時會在bakApk文件中生成三個文件,如圖: (這三個文件需要保存在本地,svn或者git服務器,每次發布補丁包的時候需要用到!)
這里寫圖片描述

發補丁包流程

1,在新建的分支上修改bug

2,將發布版本第5步中的三個文件路徑復制到app build中對應的位置,如圖:
這里寫圖片描述

3,修改bug

4,運行補丁命令獲取補丁包。單擊AS右側頂部gradle,雙擊tinkerPatchRelease,如圖:
這里寫圖片描述

5,運行完成會在build->outputs->tinkerPatch->release文件夾中生成一個名為patch_signed_7zip.apk的補丁包,如圖:
這里寫圖片描述

6,將該補丁包重修修改名字后發給后台(注意:這里的一個補丁包就適用於各個渠道包!),關於補丁包的存放與后台設計請看下一篇文章熱修復框架Tinker最完整講解(03)——使用Tinker常見問題

7,bug修改完成后將該分支合並到trunk分支即可。這樣能保證分支上修改了bug,trunk分支也跟着更新了。

熱修復Tinker系列文章

熱修復框架Tinker最完整講解(01)——集成之路

熱修復框架Tinker最完整講解(02)——加入Walle多渠道打包

熱修復框架Tinker最完整講解(03)——使用Tinker常見問題


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com