轉載請註明作者AndroidMsky和出處:
http://blog.csdn.net/AndroidMsky/article/details/54377806
前兩天剛剛寫了一篇Tinker的集成
http://blog.csdn.net/androidmsky/article/details/54135465
今天給大家帶來AndFix的集成初體驗。
還是這張圖,先說說我的初體驗吧。首先AndFix的支持範圍比起Tinker矮了不止一頭,不用多說,AndFix只支持類方法的的修改。AndFix的原理如圖:
它僅僅是繞過old Method 用new Method來替代。所以說它僅僅支持修改類的方法(新增類,新增字段都是不可以的),但是回頭一想我們的初衷,其實這也夠幹很多事情了。如果僅僅是想修復線上的bug這種打補丁的方法確實可行。相比Tinker很多東西太花哨了,讓人浮想聯翩啊,Tinker給我的第一個感覺就是不僅僅是修復,而是搞事情,搞新功能啊(Tinker都支持lib的替換)。而AndFix就像樸實的勞動人民了,老子就是來修bug的不要找我來搞事情哦。
接下來我們就集成一下AndFix並寫一個簡單的Demo來測試一下
AndFix的官方地址:
https://github.com/alibaba/AndFix
也是跟我節奏四步走:
1.引入依賴:
dependencies {
compile 'com.alipay.euler:andfix:0.5.0@aar'
}
2.新建自己application然後輸入如下代碼:
public class A extends Application {
PatchManager patchManager;
@Override
public void onCreate() {
super.onCreate();
Log.d("AAA","APPLICATION");
patchManager = new PatchManager(this);
patchManager.init("1.0");//current version
patchManager.loadPatch();
try {
Log.d("AAA","want to");
patchManager.addPatch("/sdcard/zhibo8/a2.apatch");
Log.d("AAA","success");
} catch (IOException e) {
e.printStackTrace();
Log.d("AAA","fail");
}
}
}
這個就是一會我們放差異包的路徑(每次都是zhibo8哈哈)
/sdcard/zhibo8/a2.apatch
3.權限必不可少:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
4.把簽名配置一下方便點(位置還是和Tinker一樣,APP根目錄):
signingConfigs {
release {
try {
storeFile file("./keystore/release.keystore")
storePassword "testres"
keyAlias "testres"
keyPassword "testres"
} catch (ex) {
throw new InvalidUserDataException(ex.toString())
}
}
debug {
storeFile file("./keystore/debug.keystore")
}
}
APP這裏就準備差不多了。挖槽真的就是這麼簡單,因爲AndFix不支持Gradle,所以我們也不用去配置那麼多的Task。不過不支持Gradle一會打差異包就會相對麻煩,其實Tinker支持Gradle是好事,這就是麻煩一次和麻煩多次的關係。
好了打包之七步走:
1.就打debug包好了:
gradle assembleDebug
apk會在這裏出現:
2.打了一次之後,將一個方法修改:
public String getString (){
return "old";
}
改爲:
public String getString (){
return "new";
}
在菜單中的一個按鈕調用的這個方法改變text的值:
else if (id == R.id.nav_send) {
mTextView.setText(getString());
}
3.將之前打好apk命名爲old.apk
重新
gradle assembleDebug
並命名爲new.apk
4.就是打差異包了不支持gradle我們打包的方式是通過一個jar來打(在官方github下載),首先吧兩個apk和我們打包用的工具放在同一個文件夾下:
此時文件夾中應該有這個6個文件,mac還是win分別用sh和bat
5.然後執行命令:
需要配置出處路徑,簽名信息,舊的包,新的包等。
/Users/wuduogen838/Desktop/AndFix/apkpatch.sh -o /Users/wuduogen838/Desktop/AndFix/ -k debug.keystore -p android -a androiddebugkey -e android -f new3.apk-t old3.apk
執行成功後會提示哪個方法被修改了(我們修改了getString):
這時候會生成一個差異包:
6.然後吧它push到剛剛約定好的目錄中:
adb push /Users/wuduogen838/Desktop/AndFix/new3-fa73562e0ca4f66ac9e55ed4f93f36c6.apatch /sdcard/zhibo8/a2.apatch
7.安裝old.apk到手機,重啓我們的APPLICATION成功輸出log:
好了:
頁面顯示也成功了
由
變爲
。。。
我們初次集成也就成功了。
我們看一眼issue,確實是一臉的open啊,而且很少有人解答,確實有很多比較弱弱的問題,但是也有一些真正問題。AndFix表示是支持加固的,Tinker表示不會支持加固,但是AndFix還是有人issue加固的問題,畢竟各家加固大法可能不太一樣。
項目最近的提交頻率也是不是太高哈。
相比之下,Tinker的issue區乾淨了許多:
是否引入熱更新,選擇哪個熱更新框架,看來還需根據實際情況自己定奪了。
本文demo Github 鏈接:
https://github.com/AndroidMsky/AndFixUseMksy
歡迎關注作者。歡迎評論討論。歡迎拍磚。
如果覺得這篇文章對你有幫助,歡迎打賞, 歡迎star,Fork我的github。 喜歡作者的也可follow
我的自營qq羣:
308372687