熱更新AndFix之初體驗

轉載請註明作者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
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章