1. 程式人生 > >Android 熱修復AndFix的簡單使用介紹

Android 熱修復AndFix的簡單使用介紹

AndFix是一個Android App的線上熱補丁框架。使用此框架,我們能夠在不重複發版的情況下,線上修改App中的Bug。AndFix就是 “Android Hot-Fix”的縮寫。
就目前來說,AndFix支援Android 2.3到6.0版本,並且支援arm 與 X86系統架構的裝置。完美支援Dalvik與ART的Runtime。
AndFix 的補丁檔案是以 .apatch 結尾的檔案。
AndFix是阿里巴巴開源專案。

1,在build.gradle檔案新增依賴

dependencies {
    compile 'com.alipay.euler:andfix:0.3.1@aar
'
}

2。在application中做一些初始化操作

public class BaseApplication extends Application {
    public PatchManager mPatchManager;

    @Override
    public void onCreate() {
        super.onCreate();
        initPatch();
        downPatch();
    }

    private void initPatch() {
        // 初始化patch管理類
        mPatchManager = new
PatchManager(this); // 初始化patch版本 mPatchManager.init("1.0"); // 載入已經新增到PatchManager中的patch mPatchManager.loadPatch(); //刪除所有已載入的patch檔案 mPatchManager.removeAllPatch(); } /** * 下載補丁檔案 */ private void downPatch() { String target = Environment.getExternalStorageDirectory().getAbsolutePath() + "/patch.apatch"
; Log.e("monkey", "target--> " + target); HttpUtils httpUtils = new HttpUtils();//為了簡便使用了xUtils下載檔案 String url = "http://xxx/patch.apatch";//下載地址 httpUtils.download(url, target, false, true, new RequestCallBack<File>() { @Override public void onSuccess(ResponseInfo<File> responseInfo) { String path = responseInfo.result.getAbsolutePath(); Log.e("monkey", "下載成功--> " + path); try { //新增patch,只需指定patch的路徑即可,補丁會立即生效 mPatchManager.addPatch(path); initData(); } catch (IOException e) { e.printStackTrace(); } } @Override public void onFailure(HttpException e, String s) { Log.e("monkey", "下載失敗-->"); } }); } private void initData() { List<String> list = new ArrayList<>(); for (int i = 0; i < 10; i++) { list.add(i + ""); } Toast.makeText(BaseApplication.this, list.get(list.size()), Toast.LENGTH_SHORT).show();//故意寫成陣列越界bug }

3。將專案(此時是有bug的)打包,命名為oldapk;
4。修改專案bug
5。將修改後的專案打包,命名為newapk;
6。下載官方提供的工具apkpatch
7,執行命令列

命令 : apkpatch.bat -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 使用者別名密碼

這裡寫圖片描述

8。會在-o後面的路徑中生成指定的資料夾,將裡面的xxx.apatch檔案放到伺服器上修改名稱為patch.apatch,這樣使用者在用使用old.apk的時候會下載這個補丁檔案,並立即生效