阿里開源的熱補丁框架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