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代碼!