Andfix热修复


Andfix的patch文件生成过程:

1、在gradle文件中去引入AndFix的热修复模块。

2、对Andfix所有的API做出封装,封装采用单例模式。封装完以后再application类中完成AndFix的一个初始化。其中我们会调用PatchManager的2个方法。分别是init()方法、loadPatch()方法。

3、利用apk新旧包,使用apkpatch命令生成apatch包。

4、下载patch文件,下次应用重启时生效。

 

代码具体实现:首先我们定义了一个service,通过service可以让整个修复过程在后台默默的执行,在service中首先执行oncreate方法进行一些初始化工作,比如补丁文件要存放的文件夹,然后就是onStartCommand方法,在其中发送一个事件去checkHasPatch

 

源码讲解:

打开与我们直接交互的类PatchManager,比较重要的成员变量就是经过排序的set数组,这个数组里面包含了我们应用的所有patch文件。

然后就是PatchManager的构造方法,它就是进行了一系列的初始化,比如上下文context的初始化、AndFixManager、文件夹等等的一些初始化。

下面看一下init方法的实现:它就是对patch文件的删除和添加。如果应用版本升级了,它就删除所有的patch文件,如果应用版本没有它就将所有的patch文件都添加到Set 数组中。

loadPatch:它重载了两个构造方法,一个是没有参数的,没有参数的它会调用mPatch的这个列表,然后对所有的Patch文件中的class都调用一次AndFixManager的Fix()方法;而指定了patch文件的loadPatch方法,它就是单一的修复指定patch文件夹中class。但是无论是有参数的loadPatch方法,还是无参数的他们最终调用的都是AndFixManager的    Fix()方法。而fix()的方法它只是起到了一个转化的效果,将所有class的名字转化为所有的class字节码,有了真正的字节码以后,其中通过反射注解来找到哪些方法需要被替换,最终通过JNI完成方法的替换,从而达到bug的修复。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值