什么熱修復?
就是已經發布的APP發現有bug,需要修復(資源修復,代碼修復,so庫修復),但又不想重新發布安裝包,通過讓用戶下載補丁檔案的方式解決,

熱修復的優勢
無需重新發布安裝包;用戶無感知修復,無需下載最新的應用,節省用戶流量;修復成功率高,避免線上bug帶來的業務損失,把損失降到最低,
熱修復中的不足
所有的熱修復框架不能保證100%修復成功,只能說bug的修復是相對的,如下圖的四個熱修復框架都各有所長各有不足:

比如阿里的AndFix不支持資源檔案的替換(包括xml布局,圖片,清單檔案等),不支持lib替換,不支持類替換,不支持新增類,不支持新增方法,只支持代碼上的bug替換!
熱修復框架普遍存在一個問題:雖然不用安裝新版本的安裝包同樣可以修復bug,但是如果本地下載好的補丁包被洗掉了,那么之前bug就會重新!
因為熱修復不是合拼生成新的apk,而是動態加載修復bug的那部分代碼,
換句話說修復bug的代碼是存放在補丁包里的,洗掉補丁包,修復bug的代碼也就不存在了,之前bug也就重新了,
目前市面上主流的熱修復框架:

上圖中,冷啟動修復就是合成全新的dex檔案來替換原有的dex檔案(dex檔案包含了所有app代碼),其作用在于突破熱替換方案無法新增類方法的限制,可以更好地達到修復目的,
下面演示阿里巴巴的AndFix集成步驟:
1.在Module的build.gradle添加依賴(如下圖)

2.在Application中集成代碼:

3.在MainActivity的onDestroy()方法把行程殺了

如何生成補丁檔案,供移動端下載
1.打開鏈接:https://github.com/alibaba/AndFix,下載apkpatch的補丁制作工具,并解壓到本地
2.準備兩個軟體包和一個簽名檔案keystore(例如:release-key.keystore),一個是線上有問題的軟體包(例如:bug.apk),另一個是修復bug的軟體包(例如:fix.apk),并一同放在剛才解壓的目錄下,如下圖:

3.打開Windows命令列工具,進入到解壓目錄,輸入 apkpatch.bat -f fix.apk -t bug.apk -o output -k release-key.keystore -p 123456 -a zhibin -e 000111,然后回車可以看到下圖:

(ps:123456是簽名檔案keystore的密碼,zhibin是簽名檔案的別名,000111是別名密碼,生成的補丁檔案是在output檔案夾里的,重命名為fixbug.apatch并移動到了同一層,方便截圖)
到此阿里巴巴的AndFix熱修復框架已集成完,fixbug.apatch上傳至服務器,供移動端下載,可以測驗熱修復功能了!
今天的分享結束了,再見~
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/196282.html
標籤:其他
