熱修復(fù)框架 - 從Tinker 1.9.14.7開始

一阱佛、熱修復(fù)背景

修復(fù)bug走常規(guī)發(fā)版流程,缺點(diǎn)有三:發(fā)版代價(jià)高戴而、用戶升級覆蓋速度慢凑术、bug修復(fù)不及時(shí)。而熱修復(fù)則能很好解決此問題:及時(shí)推送修復(fù)補(bǔ)丁所意,修復(fù)成功率高淮逊,代價(jià)相對小。

二扶踊、熱修復(fù)方案比較

綜合考慮兼容性泄鹏、修復(fù)覆蓋面、性能等幾個(gè)方面秧耗,目前Tinker是個(gè)比較好的選擇备籽。
wiki:https://github.com/Tencent/tinker/wiki

但是Tinker也有一些局限性:

由于原理與系統(tǒng)限制,Tinker有以下已知問題:

  • Tinker不支持修改AndroidManifest.xml分井,Tinker不支持新增四大組件(1.9.0支持新增非export的Activity)车猬;
  • 由于Google Play的開發(fā)者條款限制,不建議在GP渠道動(dòng)態(tài)更新代碼尺锚;
  • 在Android N上珠闰,補(bǔ)丁對應(yīng)用啟動(dòng)時(shí)間有輕微的影響;
  • 不支持部分三星android-21機(jī)型瘫辩,加載補(bǔ)丁時(shí)會(huì)主動(dòng)拋出"TinkerRuntimeException:checkDexInstall failed"伏嗜;
  • 對于資源替換,不支持修改remoteView杭朱。例如transition動(dòng)畫阅仔,notification icon以及桌面圖標(biāo)吹散。

Tinker盡量只用來做bug修復(fù)補(bǔ)丁弧械,而非功能發(fā)版。因?yàn)楹铣砂罂彰瘢瑫?huì)影響到動(dòng)態(tài)加載插件時(shí)的性能刃唐。

三、Tinker1.9.14.7 集成

Tinker項(xiàng)目地址
https://github.com/Tencent/tinker

最新版本更新說明:
2020年5月17日

  • Tinkerpatch 1.2.14.7發(fā)布
  • 基于Tinker 1.9.14.7
  • 徹底消除對 Android Support Library / AndroidX Library 的依賴
  • 修復(fù)熱修后 SharedLibrary R 類中的資源 ID 與 AssetManager 中 Package ID 不一致導(dǎo)致的資源找不到問題
  • 修復(fù)因魅族機(jī)器首次加載 dex 時(shí)不生成 oat 導(dǎo)致 patch 加載失敗的問題
  • 嘗試修復(fù) APPLICATION_INFO_CHANGED 事件引起的 ClassLoader 檢查異常
  • 修復(fù) OTA 之后主副進(jìn)程狀態(tài)不一致的問題界轩。

1.9.14.7 是當(dāng)前最新版本画饥,能覆蓋到Android Q版本。

Tinker集成:
demo地址:TinkerSdkDemo
項(xiàng)目描述:想run起來tinker源碼工程有點(diǎn)難度浊猾,我弄了個(gè)demo可以幫助debug1.9.14.7核心源碼抖甘,并且寫了個(gè)簡單的熱修復(fù)功能,方便debug整個(gè)修復(fù)過程葫慎,持續(xù)維護(hù)中衔彻。

demo熱修復(fù)使用說明:

  • 執(zhí)行assembleRelease打出release包薇宠,同時(shí)bakApk會(huì)生成副本文件
  • 做app修復(fù),同時(shí)調(diào)整tinker.gradle配置:
    將bakApk會(huì)生成副本文件配置到如下path變量中
ext {
    tinkerEnable = true //tinker功能開關(guān)
   tinkerID = "1.0"
   tinkerOldApkPath = "${bakPath}/app-release-0806-14-18-36.apk"
   tinkerApplyMappingPath = "${bakPath}/"
   tinkerApplyResourcePath = "${bakPath}/app-release-0806-14-18-36-R.txt"
   tinkerBuildFlavorDirectory = "${bakPath}/"
}
  • 執(zhí)行tinkerPatchRelease生成patch差分包艰额。
  • 安裝首次assembleRelease在bakApk中生成的apk澄港,同時(shí)啟動(dòng)app,這樣會(huì)創(chuàng)建 /sdcard/Android/data/com.stan.tinkersdkdemo/cache/tpatch目錄柄沮。
  • 將生成的patch_singed.apk push到上面的目錄中回梧。
  • 點(diǎn)擊加載patch。
  • 重新啟動(dòng)app修復(fù)生效祖搓。

中途遇到的坑大部分在issue中能找到解決辦法狱意,其余的低級錯(cuò)誤度娘之即可:
https://github.com/Tencent/tinker/issues

這里有一點(diǎn)需要注意一下:

錯(cuò)誤: 無法訪問Keep
  找不到com.tencent.tinker.anno.Keep的類文件

用:compileOnly("com.tencent.tinker:tinker-android-anno-support:${TINKER_VERSION}”)
替換:compileOnly("com.tencent.tinker:tinker-android-anno:${TINKER_VERSION}")

tinker官方文檔太老了,這里并沒有更新拯欧。

四髓涯、app熱修復(fù)正式商業(yè)化項(xiàng)目流程

流程:

  • 首先通過腳本或者gradle插件方式生成diff patch。
  • diff patch上傳服務(wù)端哈扮。
  • diff patch由服務(wù)端下發(fā)纬纪,然后與當(dāng)前基準(zhǔn)包進(jìn)行合成操作。
  • 下次重啟修復(fù)生效滑肉。

各公司下發(fā)patch邏輯略有差異包各,但是也大同小異,參考我做的這版方案:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載靶庙,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者问畅。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市六荒,隨后出現(xiàn)的幾起案子护姆,更是在濱河造成了極大的恐慌,老刑警劉巖掏击,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卵皂,死亡現(xiàn)場離奇詭異,居然都是意外死亡砚亭,警方通過查閱死者的電腦和手機(jī)灯变,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捅膘,“玉大人添祸,你說我怎么就攤上這事⊙罢蹋” “怎么了刃泌?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我耙替,道長鲤遥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任林艘,我火速辦了婚禮盖奈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘狐援。我一直安慰自己钢坦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布啥酱。 她就那樣靜靜地躺著爹凹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪镶殷。 梳的紋絲不亂的頭發(fā)上禾酱,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機(jī)與錄音绘趋,去河邊找鬼颤陶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛陷遮,可吹牛的內(nèi)容都是我干的滓走。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼帽馋,長吁一口氣:“原來是場噩夢啊……” “哼搅方!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绽族,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤姨涡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后吧慢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涛漂,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年娄蔼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了怖喻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岁诉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出跋选,到底是詐尸還是另有隱情涕癣,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站坠韩,受9級特大地震影響距潘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜只搁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一音比、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧氢惋,春花似錦洞翩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至熊赖,卻和暖如春来屠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背震鹉。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工俱笛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人传趾。 一個(gè)月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓嫂粟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親墨缘。 傳聞我的和親對象是個(gè)殘疾皇子星虹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359