阿里開源的熱補丁框架Android hot-fix使用教程

mync 9年前發布 | 119K 次閱讀 Android開發 移動開發 Android hot-fix

阿里巴巴推出的AndFix框架

首次給出大家這個框架的地址:https://github.com/alibaba/AndFix 對源碼比較感興趣的同學們可以自行研究代碼

AndFix介紹

AndFix,全稱是Android hot-fix。是阿里開源的一個熱補丁框架,允許APP在不重新發布版本的情況下修復線上的bug。支持Android 2.3 到 6.0,并且支持arm 與 X86系統架構的設備。完美支持Dalvik與ART的Runtime,補丁文件是以 .apatch 結尾的文件

原理

替代方式

AndFix判斷java自定義的聲明方法是否應該被替代,它在ATR上使用art的替代方法,在X86上使用dalvik的替代方法,加載方式是不同的,對于Dalvik來說,需要改變本地的目標文件,連接成AndFix自己的加載方式,這種方式需要注冊回掉;對于ART來說,只需要改變自身的 ArtMethod屬性來取代它

修復過程

使用方式

1.添加AndFix依賴包

compile 'com.alipay.euler:andfix:0.3.1@aar'

2.在application中初始化

patchManager = new PatchManager(getApplicationContext());
        patchManager.init(version);//current version patchManager.loadPatch();

這里涉及到一個版本問題,如果版本好相同的情況下,有補丁會去加載,如果版本好不相同的情況下,默認補丁會被刪除

3.添加新補丁

patchManager.addPatch(path);//path of the patch file that was downloaded

這個方法最好放在你的補丁已經下載的完成之后,還有一個個人遇到的問題,在這里提醒一下大家,這個補丁的名字不能相同,補丁文件在文件名字相同的情況下,它會直接去加載data/packagename/files/apatch_opt這個目錄下的文件,所以不同的補丁要使用不同的名字,并且同一個補丁只會加載一次,加載完了可以刪除

生成補丁的工具

官方提供的工具apkpatch

下載解壓之后長這樣:
這里寫圖片描述

.bat是留給window用的
.sh是OSX用的

./apkpatch.sh -f new.apk -t old.apk -o output1 -k debug.keystore -p android -a androiddebugkey -e android

-f <new.apk> :新版本
-t <old.apk> : 舊版本
-o <output> : 輸出目錄
-k <keystore>: 打包所用的keystore
-p <password>: keystore的密碼
-a <alias>: keystore 用戶別名
-e <alias password>: keystore 用戶別名密碼

這是我本地使用的命令:

兩個apk之間的變換都會在這里實現出來,當然只能改變方法,不能改變UI方面的東西

生成這么個東西:
這里寫圖片描述

上面這個.apatch的文件就是補丁啦!

混淆

-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
    native <methods>;
}
-keep class com.alipay.euler.andfix.** { *; }

安全性

下載下來的patch文件,在修復之前會驗證,在使用apkpatch工具簽名的過程中保證文件的安全性,加載之前先去驗證這個文件是否是自己的,之后使用md5解密

待解決問題

其中部分手機(部分小米,華為)不能實現熱更新

轉自:http://blog.csdn.net/elinavampire/article/details/50261783

 本文由用戶 mync 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!