一种小而美的热修复方案中间件——AndFix

在我们走安全模式或者崩溃恢复的过程中、或者从请求OkHttp的Interceptor过滤中捎带探针得到要打补丁的时候,AndFix就派上用场了。

之所以是小而美,是因为该方案只能针对异常发生在java文件中,不针对Android资源,so库等进行修复。考虑到实际工程的需要,实际上这种修复方式已经满足工程的需要。如下图,左边为打补丁包的过程,ApkPatch工具会对老apk和新apk进行diff比对,得到类名相同,但内容不同的一些info信息,然后把这些info信息写进.smaol文件中,生成dex文件,每个release dex都需要进行keystore签名,最后进行md5校验生成md5文件。右边是具体工程运行的加载补丁包的过程。主要的地方就在于补丁包加载过程中,怎么做到相同类名的属性或者方法替换。核心的地方就在于自定义了classloader,因为类名相同的情况下,如果不定义classloader,那么默认还是加载了之前使用的classloader进行类的加载,此时还是会加载老的dex的class。然后查找出修改的方法或者属性,修改ART(dalvik)的字节码指针指向。

18582563-12052182c6cc2ab1.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值