Android之andfix使用说明

Android之andfix使用说明

          现在Android比较常见的技术就是热修复、插件化和组件化的操作,这里自己学习了下比较老的一个框架-------andfix。全称是Android hot-fix。是阿里开源的一个热补丁框架,允许app在不重新发布新版本的情况下修复线上的bug。但是这个框架有仅仅支持Android2.3到6.0,。但是还是值得学习一下。

使用方式:

1.添加依赖
         compile 'com.alipay.euler:andfix:0.3.1@aar'
2 加载补丁的程序应在应用启动的时候就启动,在Application.oncreate()中做初始化操作
public class MyApplication  extends Application{

     static   PatchManager patchManager;
    String appversion;

    @Override
    public void onCreate() {
        super.onCreate();
        try {
            appversion = getPackageManager().getPackageInfo(getPackageName(),0).versionName;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        patchManager = new PatchManager(this);
        patchManager.init(appversion);
        patchManager.loadPatch();
    }
}
这里需要注意的是每次APPversion变更都会导致所有补丁被删除,如果APPversion没有改变,才回加载已经保存的补丁。
3.在需要的地方调用PatchManager的addpatch方法,来加载已经保存的新补丁。正常情况下是在下载新的补丁之后调用。

4.生成补丁,补丁的生成是通过两个相同的appversion的新老apk,新apk是修复bug后生成的apk,通过官方提供的工具apkpatch
    然后通过命令 生成 .apatch的补丁文件。
    命令格式 :
      D:\下载\apkpatch-1.0.3>apkpatch.bat -f andfix_v0.2.apk -t andfix_v0.1.apk -o output -k andfix.jks -p 123456 -a key0 -e 123456
    下载apkpatch工具--->解压------>进入工具目录------>输入命令-------->生成.apatch文件
      命令选项:
           - f  新的修复了BUG的apk文件名
           - t  老的有BUG的apk文件名
           - o output  补丁文件生成后保存的文件夹
           - k andfix.jks  打包需要的签名文件
           - p 签名文件的密码
           - a 文件别名,  key  alias
           - e 别名文件密码

5.  通过网络或者其他的方法,把补丁文件放置到指定的文件夹目录下,运行addpatch方法加载补丁,加载完成做好删除,重启应用即刻。

大致原理

apkpatch将两个apk做一次对比,然后找出不同的部分。可以看到生成的apatch了文件,后缀改成zip再解压开,里面有一个dex文件。通过jadx查看一下源码,里面就是被修复的代码所在的类文件,这些更改过的类都加上了一个_CF的后缀,并且变动的方法都被加上了一个叫@MethodReplace的annotation,通过clazz和method指定了需要替换的方法。然后客户端sdk得到补丁文件后就会根据annotation来寻找需要替换的方法。最后由JNI层完成方法的替换。

多打补丁


如果本地保存了多个补丁,那么AndFix会按照补丁生成的时间顺序加载补丁。具体是根据.apatch文件中的PATCH.MF的字段Created-Time。

安全性


readme提示开发者需要验证下载过来的apatch文件的签名是否就是在使用apkpatch工具时使用的签名,如果不验证那么任何人都可以制作自己的apatch文件来对你的APP进行修改。但是我看到AndFix已经做了验证,如果补丁文件的证书和当前apk的证书不是同一个的话,就不能加载补丁。官网还有一条,提示需要验证optimize file的指纹,应该是为了防止有人替换掉本地保存的补丁文件,所以要验证MD5码,然而SecurityChecker类里面也已经做了这个工作。。但是这个MD5码是保存在sharedpreference里面,如果手机已经root那么还是可以被访问的。

参考文章:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值