Andfix運用實例
關於Android熱修復的文章有很多,原理也不少,這裏就不在累贅描述了。可以參考一下博主的原理解析:
http://blog.csdn.net/qxs965266509/article/details/49816007
http://blog.csdn.net/u011176685/article/details/50984638
http://www.jianshu.com/p/0f7665944be3
等相關文章。
這裏直接講述怎麼運用:
事先你得配置NDK環境;直接下載最新的NDK解壓到盤符,注意盤符最好不要帶中文或空格
1.如果你的IDE是Studio,那麼直接導入![]()
如果是Eclipse 那麼導入 上面的 AndFix (這是一個library,作爲你項目的依賴使用)
2.在你的工程的Application中初始化:
import android.app.Application;
import android.os.Environment;
import android.util.Log;
import com.alipay.euler.andfix.patch.PatchManager;
import java.io.File;
import java.io.IOException;
/**
* sample application
*
*/
public class MainApplication extends Application {
private final String TAG = "TAG_Andfix";
private final String APATCH_PATH = "/out.apatch";
private final String DIR = "apatch";//補丁文件夾
/**
* patch manager
*/
private PatchManager mPatchManager;
@Override
public void onCreate() {
super.onCreate();
// 初始化patch管理類
mPatchManager = new PatchManager(this);
// 初始化patch版本
mPatchManager.init("1.0");
// 加載已經添加到PatchManger中的patch
mPatchManager.loadPatch();
// .apatch 文件路徑
String patchFileString = Environment.getExternalStorageDirectory().getAbsolutePath() + APATCH_PATH;
File apatchFile = new File(patchFileString);
if(apatchFile.exists()){
try {
//加載補丁
mPatchManager.addPatch(patchFileString);
//複製且加載補丁成功後,刪除下載的補丁,補丁複製到 /data/data/appName/files/apatch/out.apatch
File f = new File(this.getFilesDir(), DIR + APATCH_PATH);
if (f.exists()) {
boolean result = apatchFile.delete();
if (result)
Log.e(TAG, patchFileString + ";複製補丁成功,刪除SD卡補丁成功");
else
Log.e(TAG, patchFileString + ";複製補丁成功,刪除SD卡補丁失敗");
}
} catch (IOException e) {
Log.e(TAG, "打補丁出錯了");
e.printStackTrace();
}
}else{
Log.e(TAG, "補丁文件不存在");
}
}
}
3.按照正常流程,打包第一版apk(old.apk)
4.修改有bug的部分,正常打包出第二版apk(new.apk)
5.將兩個APK和簽名文件一起復制到上圖中 apkpatch-1.0.3 文件目錄下
6.CMD執行命令 apkpatch -f new.apk -t old.apk -o in -k xxx.keystore -p 123456 -a 123456 -e 123456 -n out
命令的解釋:-f 新版APK路徑;-t 舊版APK路徑 -o 輸出目錄 -k 簽名文件路徑 -p 簽名文件密碼 -a 別名 -e 別名密碼 -n 輸出的apatch文件名稱
7.如果是分工協作,各自修復自己的模塊,可能會有多個.apatch,執行如下命令將多個文件合併:
apatch -m in -o out -k xxx.keystore -p 123456 -a 123456 -e 123456
8.將in(或者out)目錄下的生成的.apatch文件重命名爲 out.apatch
9.將 out.apatch 文件push或者客戶端下載到手機SD卡根目錄下
10.下載完成後,重啓APP即可
Demo 下載地址:Demo