Android 熱修復

什麼是熱修復技術? AndFix 框架替換原理和優點...java

什麼是熱修復技術?

當咱們已上線的app出現了很是影響用戶使用的緊急Bug,一般狀況下須要在第一時間線下修復該bug,而後通過一系列測試驗證,最後打渠道包在各大應用市場從新發布升級版本,用戶經過下載新包完成Bug修復;git

顯然,整個過程很耗時耗力,必定程度上也會影響到用戶使用體驗,鑑於這種問題存在,熱修復框架就產生了。
開發人員只須要針對Bug打出補丁推給用戶,用戶檢測到補丁而後自動拉取,修復Bug;github

對於Bug的處理,咱們不要過於依賴熱修復框架,在開發的過程當中仍是要按照標準的流程作好自測、配合測試人員完成測試流程 。bash

AndFix原理和優點

  • AndFix,全稱是Android hot-fix。是阿里開源的一個Android熱補丁框架,容許APP在不從新發布版本的狀況下修復線上的bug。app

  • AndFix的原理就是方法的替換,把有bug的方法替換成補丁文件中的方法框架

AndFix原理描述

Andfix在項目中使用過程介紹ide

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. 侷限性

  1. 沒法添加新類和新字段

  2. 沒法替換構造函數和Application的onCreate方法

  3. 沒法動態加入新功能模塊,有別於dex的替換

相關文章
相關標籤/搜索