Alibaba-AndFix Bug熱修復框架的使用

我是喬同學發表於2015-11-13

AndFix

AndFix

這篇主要介紹alibaba的AndFix專案的使用,下一篇介紹 AndFix原理及原始碼解析

Github:https://github.com/alibaba/AndFix


AndFix介紹

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


Android上如何使用

1.在自定義Application中初始化,為了更早的修復應用中的bug。

package com.euler.andfix;

import android.app.Application;

import com.alipay.euler.andfix.patch.PatchManager;

/**
 * MainApplication 2015-11-12 下午2:07:11
 * 
 * @author 喬曉鬆 965266509@qq.com
 */
public class MainApplication extends Application {

    public PatchManager mPatchManager;

    @Override
    public void onCreate() {
        super.onCreate();
        // 初始化patch管理類
        mPatchManager = new PatchManager(this);
        // 初始化patch版本
        mPatchManager.init("1.0");
        // 載入已經新增到PatchManager中的patch
        mPatchManager.loadPatch();
    }
}

2.如果有新的補丁需要修復,下載完成後,進行以下操作

//新增patch,只需指定patch的路徑即可,補丁會立即生效
mPatchManager.addPatch(path);

3.當apk版本升級,需要把之前patch檔案的刪除,需要以下操作

//刪除所有已載入的patch檔案
mPatchManager.removeAllPatch();

patch檔案的生成

使用工具:apkpatch-1.0.3
原理:根據兩個apk包,生成一個差異檔案,就是所謂的補丁檔案即patch檔案。

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

這裡寫圖片描述
執行完命令,就會在輸出目錄中輸出.apatch檔案:
這裡寫圖片描述
new-c293df7dbc23f11214fdd020ea78d3b8.apatch:就是patch檔案。

.apatch檔案根目錄內容:這裡寫圖片描述
META_INF檔案下內容:這裡寫圖片描述
PATCH.MF檔案內容:這裡寫圖片描述注:Patch-Classes就是改動過的class.

客戶端請求伺服器介面(api),伺服器根據使用者傳遞的資料分析是否有需要修復的bug。
如果有bug需要修復,就下載伺服器指定的.apatch檔案的連結,下載完後及時載入並修復,使用addpatch(path)方法,補丁會立即生效。

在Android Studio使用

maven dependency:

<dependency>
    <groupId>com.alipay.euler</groupId>
    <artifactId>andfix</artifactId>
    <version>0.3.1</version>
    <type>aar</type>
</dependency>

or gradle dependency:

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

在Eclipse使用

把Java層的程式碼引入到你的工程,配置Ndk開發環境並把jni Native程式碼新增進來。

程式碼混淆(ProGuard)

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

AndFix原理:Alibaba-AndFix Bug熱修復框架原理及原始碼解析

相關文章