關於Android熱修復技術(AndFix—阿里)

AndFix

是阿里開源的一個熱修復工具,使用它可以在線修復方法bug達到讓程序能實時的避免bug提示。

AndFix可以最大的優點是實時性加載補丁包,限制的地方:經過測試對添加調用新的Class和添加新Args不起效,其他的還是能正常修復,不過如果涉及到要使用新類來進行bug修復,那估計也得發佈新版本了吧,因此AndFix還是能很好的滿足日常需求的。


如何使用?


1 github下載補丁管理包(https://github.com/alibaba/AndFix
這個是開源的,所以下載下來可以看看源碼多多益善。
2 在APP的application中初始補丁管理包

public PatchManager mPatchManager;
  //單個補丁包
private static final String APATCH_PATH = "/newnew.apatch";
mPatchManager=new PatchManager(getApplicationContext());
// 初始化patch版本
  mPatchManager.init("1.0");
  // 加載已經添加到PatchManager中的patch
  mPatchManager.loadPatch();
  String patchFileString = Environment.getExternalStorageDirectory()
                .getAbsolutePath() + APATCH_PATH;
  Log.i("result", "patchFileString="+patchFileString);
  Log.i("result", "補丁文件是否存在:"+new File(patchFileString).exists());
try {
        mPatchManager.addPatch(patchFileString);
} catch (IOException e) {
            // TODO Auto-generated catch block
        e.printStackTrace();
}

3 使用apkpatch分差工具生成需要修復的補丁(感覺這裏和增量升級使用的分差工具是一樣的),使用命令:
Cmd –>定位到apkpatch.bat所在的文件夾

apkpatch.bat –f new.apk –t old.apk –o output –k abc.keystore –p 111111 

-a abc.keystore –e 111111
–f new.apk:指定新的版本apk
-t old.apk:指定舊版本有bug的apk
–o output:生成的補丁文件所放的文件夾
–k abc.keystore:打包密鑰
–p 111111:打包密鑰密碼
-a abc.keystore:密鑰別名
-e 111111:別名密碼(這樣一般和密鑰密碼一致)

4 客戶端下載服務器的補丁包到sd卡中(這裏可以把補丁包都放入同一文件夾)

注意:別忘記添加app的讀取和寫入SD卡的權限


以下內容可以忽略….


AndFix大致原理記錄下(用github上的):

AndFix的原理就是方法的替換,把有bug的方法替換成補丁文件中的方法。
這裏寫圖片描述

實現使用C,C++底層進行指針替換修復bug。

整體流程如下:
這裏寫圖片描述
這裏寫圖片描述

具體底層實現可以看jni代碼!

發佈了59 篇原創文章 · 獲贊 26 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章