Robust 接入

前言
Robust熱更新系統借鑑Instant Run原理,實現了一個兼容性更強而且實時生效的熱更新方案。其基本思路是,Robust熱更新系統在一個方法的入口處插入一段跳轉代碼,當發現某個方法出現bug就跳轉執行補丁中的代碼,略過原有代碼的執行,否則執行原有方法體邏輯。
Github:https://github.com/Meituan-Dianping/Robust/blob/master/README-zh.md
這裏寫圖片描述

1.ROBUST 接入
接入流程 https://github.com/Meituan-Dianping/Robust/blob/master/README-zh.md
引入類庫
1.在App的build.gradle 目錄下引入依賴:
這裏寫圖片描述

這裏寫圖片描述

2.在整個工程的build.gradle目錄下加入:

這裏寫圖片描述

Robust.xml數據配置
在項目的src同級目錄下配置部分配置robust.xml文件,按需求自行配置。

這裏寫圖片描述
robust.xml https://123.sankuai.com/km/api/file/16297368/16310626

在未修復之前,先用打線上包的命令打包,保留build目錄下的mapping.txt和methodsMap.robust文件。

這裏寫圖片描述

補丁路徑設置,此處設置補丁的加載位置,這樣才能知道,補丁下載到哪,又該去哪裏加載
這裏寫圖片描述

繼承此類,實現上述3個抽象方法。(Tips:按demo自己copy,有特殊要求自行訂製。)

此處做一個思考,爲啥不用接口,要用抽象類。

2.補丁製作

自動化補丁製作:自動製作補丁 https://tech.meituan.com/android_autopatch.html

手動製作

3.加載補丁

4.線上修復流程

Jenkins一鍵補丁 https://wiki.sankuai.com/pages/viewpage.action?pageId=905191353
測試服補丁發佈地址

補丁的測試與發佈

上線之前先在測試服務器進行發佈,免得污染線上的環境。爲了把線上apk中的獲取補丁的請求轉發到測試服務器上,需要使用Charles進行轉發,需要導入配置文件。

原理: App啓動之初,會去請求一個補丁list,如果線上有補丁發佈,且符合補丁下發條件,則會去下載補丁,自動加載。

請求帶有如下主要參數:

appVersion : 添加補丁時填寫,基於哪個版本的apk開發的補丁。

apkHash:用來保證線上apk的唯一性。

uuid:補丁下發策略。

userId:補丁下發策略,用戶登陸後,根據userId決定向哪些用戶下發補丁。

下面是一個測試的請求補丁請求:

/appupdate/patch/list?apiLevel=22&dev=M1-NL&devModel=M1-NL&brand=SUNMI&jvmVersion=2.1.0&userId=27997173&channel=jenkins&cpuArc=armeabi-v7a&robustVersion=60000&apkHash=1b8581e3eb0c615af855a8086a281e56&applicationId=com.sankuai.erp.waiter&uuid=43e0b9dc7902464a8a34418f9a913a160000000000000271990&appVersion=2.1.0 HTTP/1.1

請求成功之後,會在download文件夾下面下載一個補丁,如圖:

5.優缺點對比

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章