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