一、简介
AndFix是阿里开源的热修复方案,是轻量级的。好处是集成简单,跟我们使用其他第三方就多了一步生成apatch文件,就是补丁文件。AndFix能在线修复的bug,能立即生效不需要重启。不过andfix只能修复方法级别的bug,不能新增方法,也不能修改资源和so文件等。与微信开源的tinker相比能做的确实少了点,但是andfix方便,集成简单,学习成本低,看项目需求可以选择到底用那家的方案。andfix地址:https://github.com/alibaba/AndFix
二、集成SDK
添加依赖
compile 'com.alipay.euler:andfix:0.5.0@aar'
三、初始化
1、看官网介绍初始化andfix就几个方法
patchManager = new PatchManager(context);
patchManager.init(appversion);//current version
patchManager.loadPatch();//加载patch文件
上面这几行代码就是初始化
2、
patchManager.addPatch(path);
这个方法就是添加patch文件,就是在哪个需要修复的地方调用这个方法就行。
3、这里对andfix进行各封装,封装成AndFixManager
public class AndFixManager {
private static AndFixManager mInstance = null;
private static PatchManager mPatchManager = null;
public static AndFixManager getInstance() {
if (mInstance == null) {
synchronized (AndFixManager.class) {
if (mInstance == null) {
mInstance = new AndFixManager();
}
}
}
return mInstance;
}
//初始化AndFix方法
public void initPatch(Context context) {
mPatchManager = new PatchManager(context);
mPatchManager.init(AppUtils.getVersionName(context));
mPatchManager.loadPatch();
}
//加载我们的patch文件
public void addPatch(String path) {
try {
if (mPatchManager != null) {
mPatchManager.addPatch(path);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
在项目application中初始化
AndFixManager.getInstance().initPatch(this);
四、生成patch文件
去andfix官网下载patch文件生成工具 https://github.com/alibaba/AndFix/raw/master/tools/apkpatch-1.0.3.zip
上面图片就是这个工具,apkpatch.bat是Windows系统使用的,apkpatch.sh是Mac系统上的。andfix.jks是自己项目的签名文件copy过来的,
new.apk对应下面的 : -f,--from <loc> new Apk file path.//修改bug后的apk
app-release.apk对应下面的: -t,--to <loc> old Apk file path.//有bug的apk路径
outputs是自己新建的输出文件存放的目录:-o,--out <dir> output dir.//输出文件的路径
create_patch.sh是自己保存的命令,省的每次都重新输。
如Mac下完整的命令:./apkpatch.sh -f new.apk -t app-release.apk -o outputs -k andfix.jks -p 123456 -a andfix -e 123456
usage: apkpatch -f <new> -t <old> -o <output> -k <keystore> -p <***> -a <alias> -e <***>
-a,--alias <alias> keystore entry alias.//项目签名文件的别名
-e,--epassword <***> keystore entry password.//别名的密码
-f,--from <loc> new Apk file path.//修改bug后的apk
-k,--keystore <loc> keystore path.//签名文件路径
-n,--name <name> patch name.//生成的patch文件的名字
-o,--out <dir> output dir.//输出文件的路径(自己定)
-p,--kpassword <***> keystore password.//签名文件的密码
-t,--to <loc> old Apk file path.//有bug的apk路径
命令行在按上面输入这个命令就可生成patch文件。
生成的
上面的test.apatch文件就是补丁文件,也就是我们要使用的文件.
五、加载补丁
将上面生成的test.apatch文件push到手机或者是copy到手机的一个文件夹中path中,然后就可以调用下面的代码加载补丁了。
AndFixManager.getInstance().addPatch(path); //path是补丁包本地路径。