Android 熱修復AndFix的簡單使用介紹
阿新 • • 發佈:2019-02-04
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的時候會下載這個補丁檔案,並立即生效