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

轉(zhuǎn)載請(qǐng)注明出處:http://www.reibang.com/p/8a850ddee403

前言

上一篇文章 熱修復(fù)框架Tinker最完整講解(01)——集成之路 已經(jīng)介紹我們的項(xiàng)目渠道包有20個(gè)羡榴,并且我們多渠道打包是采用productFlavors實(shí)現(xiàn)的卵皂。但是這種多渠道打包會(huì)造成20個(gè)渠道包的熱更新就需要20個(gè)補(bǔ)丁址晕,這樣肯定是不合理的撇贺。那怎樣才能實(shí)現(xiàn)20個(gè)渠道包只需要一個(gè)補(bǔ)丁包呢杯道?Tinker官方也說了,推薦我們多渠道打包使用Walle伶氢,這樣就能實(shí)現(xiàn)多個(gè)渠道包只使用一個(gè)補(bǔ)丁包了翔忽!

什么是Walle?

Walle(瓦力):Android Signature V2 Scheme簽名下的新一代渠道包打包神器铃彰。
瓦力通過在Apk中的APK Signature Block區(qū)塊添加自定義的渠道信息來生成渠道包绍豁,從而提高了渠道包生成效率,可以作為單機(jī)工具來使用牙捉,也可以部署在HTTP服務(wù)器上來實(shí)時(shí)處理渠道包Apk的升級(jí)網(wǎng)絡(luò)請(qǐng)求竹揍。
——介紹來自Walle

集成

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

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

配置build.gradle

1,在項(xiàng)目的build.gradle 文件中添加Walle Gradle插件的依賴带到, 如下

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

2昧碉,在app的 build.gradle 文件中apply這個(gè)插件,并添加上用于讀取渠道號(hào)的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")
}

配置項(xiàng)具體解釋:

apkOutputFolder:指定渠道包的輸出路徑, 默認(rèn)值為new File("${project.buildDir}/outputs/apk")

apkFileNameFormat:定制渠道包的APK的文件名稱, 默認(rèn)值為'${appName}-${buildType}-${channel}.apk'
可使用以下變量:

     projectName - 項(xiàng)目名字
     appName - App模塊名字
     packageName - applicationId (App包名packageName)
     buildType - buildType (release/debug等)
     channel - channel名稱 (對(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:包含渠道配置信息的文件路徑:

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

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

相關(guān)API和命令

獲取渠道信息

在需要渠道等信息時(shí)可以通過下面代碼進(jìn)行獲取

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

生成渠道包

生成渠道包的方式是和assemble${variantName}Channels指令結(jié)合论颅,渠道包的生成目錄默認(rèn)存放在 build/outputs/apk/哎垦,也可以通過walle閉包中的apkOutputFolder參數(shù)來指定輸出目錄

生成渠道包 ./gradlew clean assembleReleaseChannels

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

使用

在Android Studio的Terminal中輸入命令gradlew clean assembleReleaseChannels進(jìn)行多渠道打包,當(dāng)運(yùn)行完成會(huì)出現(xiàn)BUILD SUCCESSFUL, 如圖:

并且會(huì)在channels文件夾中生成所有渠道的apk,如圖:


一一對(duì)應(yīng)關(guān)系為:


Tinker與Walle在真實(shí)項(xiàng)目中的使用流程

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

發(fā)布版本流程

1,我們?cè)诎l(fā)布版本的時(shí)候都需要改版本號(hào)澡谭,因?yàn)槲疫@里使用版本名稱作為tinkerId愿题,所以發(fā)布版本修改版本名稱的時(shí)候损俭,tinkerId也要跟著修改蛙奖。(tinkerId主要作用是當(dāng)前打出的補(bǔ)丁包是基于哪個(gè)版本的apk, tinkerId的選取見我下一篇文章 熱修復(fù)框架Tinker最完整講解(03)——使用Tinker常見問題

2, 檢查app build中是否開啟了熱修復(fù)功能, 即tinkerEnabled需要設(shè)置為true船响。如圖:


3顶籽,打包前先建一個(gè)當(dāng)前版本的分支R省!T茏(熱更新修復(fù)bug就在該分支上修改)

4,在AS的Terminal中輸入命令gradlew clean assembleReleaseChannels進(jìn)行多渠道打包
命令行運(yùn)行完成會(huì)在channels文件夾中生成所有渠道的apk日裙, 如圖:


5吹艇,同時(shí)會(huì)在bakApk文件中生成三個(gè)文件,如圖: (這三個(gè)文件需要保存在本地昂拂,svn或者git服務(wù)器受神,每次發(fā)布補(bǔ)丁包的時(shí)候需要用到!)


發(fā)補(bǔ)丁包流程

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

2鼻听,將發(fā)布版本第5步中的三個(gè)文件路徑復(fù)制到app build中對(duì)應(yīng)的位置,如圖:


3联四,修改bug

4撑碴,運(yùn)行補(bǔ)丁命令獲取補(bǔ)丁包。單擊AS右側(cè)頂部gradle朝墩,雙擊tinkerPatchRelease醉拓,如圖:


5,運(yùn)行完成會(huì)在build->outputs->tinkerPatch->release文件夾中生成一個(gè)名為patch_signed_7zip.apk的補(bǔ)丁包,如圖:


6亿卤,將該補(bǔ)丁包重修修改名字后發(fā)給后臺(tái)(注意:這里的一個(gè)補(bǔ)丁包就適用于各個(gè)渠道包C蹈洹),關(guān)于補(bǔ)丁包的存放與后臺(tái)設(shè)計(jì)請(qǐng)看下一篇文章熱修復(fù)框架Tinker最完整講解(03)——使用Tinker常見問題怠噪。

7恐似,bug修改完成后將該分支合并到trunk主干上即可。這樣能保證分支上修改了bug傍念,trunk主干上也跟著更新了矫夷。

Tinker系列文章講的已經(jīng)非常詳細(xì)了,有不足的地方希望指出憋槐。遇到不懂的問題都可以直接在博客下評(píng)論問我双藕,只要我遇到過并且能回答出來的都會(huì)樂意回答。

Demo下載地址:https://github.com/wildma/WildmaTinker
如果對(duì)你有幫助請(qǐng)點(diǎn)贊阳仔,star支持下哈~

熱修復(fù)Tinker系列文章

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末忧陪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子近范,更是在濱河造成了極大的恐慌嘶摊,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件评矩,死亡現(xiàn)場(chǎng)離奇詭異叶堆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)斥杜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門虱颗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蔗喂,你說我怎么就攤上這事忘渔。” “怎么了缰儿?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵畦粮,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我返弹,道長(zhǎng)锈玉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任义起,我火速辦了婚禮拉背,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘默终。我一直安慰自己椅棺,他們只是感情好犁罩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著两疚,像睡著了一般床估。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诱渤,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天丐巫,我揣著相機(jī)與錄音,去河邊找鬼勺美。 笑死递胧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赡茸。 我是一名探鬼主播缎脾,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼占卧!你這毒婦竟也來了遗菠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤华蜒,失蹤者是張志新(化名)和其女友劉穎辙纬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體友多,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牲平,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了域滥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蜈抓,死狀恐怖启绰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情沟使,我是刑警寧澤委可,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站腊嗡,受9級(jí)特大地震影響着倾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜燕少,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一卡者、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧客们,春花似錦崇决、人聲如沸材诽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)脸侥。三九已至,卻和暖如春盈厘,著一層夾襖步出監(jiān)牢的瞬間睁枕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工沸手, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留譬重,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓罐氨,卻偏偏與公主長(zhǎng)得像臀规,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子栅隐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容