Android 熱修復
阿新 • • 發佈:2018-12-26
什麼是熱修復技術? AndFix 框架替換原理和優勢...
什麼是熱修復技術?
當我們已上線的app出現了非常影響使用者使用的緊急Bug,通常情況下需要在第一時間線下修復該bug,然後經過一系列測試驗證,最後打渠道包在各大應用市場重新發布升級版本,使用者通過下載新包完成Bug修復;
顯然,整個過程很耗時耗力,一定程度上也會影響到使用者使用體驗,鑑於這種問題存在,熱修復框架就產生了。
開發人員只需要針對Bug打出補丁推給使用者,使用者檢測到補丁然後自動拉取,修復Bug;
對於Bug的處理,我們不要過於依賴熱修復框架,在開發的過程中還是要按照標準的流程做好自測、配合測試人員完成測試流程 。
AndFix原理和優勢
AndFix,全稱是Android hot-fix。是阿里開源的一個Android熱補丁框架,允許APP在不重新發布版本的情況下修復線上的bug。
AndFix的原理就是方法的替換,把有bug的方法替換成補丁檔案中的方法
Andfix在專案中使用過程介紹
1. 補丁包生成
1. 正常編譯打包生成apk檔案(帶Bug的),例如:old.apk;
2. 修復Bug後打包生成新的apk檔案 例如: new.apk ;
3. 利用工程中tools資料夾下apkpatch工具生成 .aptch補丁檔案;
複製程式碼
(a). cd 進入tools資料夾下複製程式碼
(b). 執行 apkpatch -f <new> -t <old> -o <output> -k <keystore> -p <***> -a <alias> -e <***>複製程式碼
-o <output> : 輸出目錄
-k <keystore>: 打包所用的keystore
-p <password>: keystore的密碼
-a <alias>: keystore 使用者別名
-e <alias password>: keystore 使用者別名密碼
-f <new.apk> :新版本
-t <old.apk> : 舊版本
複製程式碼
2. 補丁檔案上傳
將生成的.apkpatch檔案 手動上傳到服務端
(詳細操作暫無)
3. 下載補丁檔案
1. 檢測補丁包介面 ;
複製程式碼
在程式初始化時請求介面,檢測服務端補丁資訊
無補丁:繼續初始化框架 <div class="md-section-divider"></div>複製程式碼
有補丁:執行如下2操作 複製程式碼
2. 補丁包下載介面 ;
複製程式碼
下載補丁檔案
拉取失敗:下次程式進入重新校驗補丁包,並下載 複製程式碼
拉取成功: 執行如下3操作 複製程式碼
3. 解壓縮 ;
複製程式碼
1.對壓縮包進行解壓 複製程式碼
2.校驗合法性(檔案型別,長度,驗證補丁檔案的簽名,驗證優化檔案的指紋等)複製程式碼
4. 解密 ;
複製程式碼
解密壓縮包 複製程式碼
新增補丁 patchManager . addPatch(路徑)複製程式碼
4. 重啟程式,載入補丁,修復bug
patchManager . loadPatch()複製程式碼
補丁載入通常是在應用程式的初始化階段(例如Application.onCreate());
補丁內部替換流程說明:
1.補丁下載到相應目錄
2.通過loadPatch方法載入
3.會將補丁複製到app的目錄裡面,然後下載補丁的檔案會被刪除
4.如果versionName改變了,將會刪除apatch裡面所有的補丁。
複製程式碼
5. 混淆處理
-printmapping proguard.map 首先需要生成mapping檔案記錄混淆規則,之後可以把printmapping 這句話註釋掉,每次只使用applymapping。
-applymapping proguard.map (然後在下面加上) 複製程式碼
-keepclass*extendsjava.lang.annotation.Annotation 複製程式碼
-keepclasseswithmembernamesclass*{native ;} 複製程式碼
-keepclasscom.alipay.euler.andfix.**{ *; } 複製程式碼
6. 侷限性
無法新增新類和新欄位
無法替換建構函式和Application的onCreate方法
無法動態加入新功能模組,有別於dex的替換