0%

05-热修复-第三节

一、热修复演示

打包之后补丁包,里面类名和方法名都要根据 mapping.txt 来,比如,我们项目中 com.test.Utils 中 的 test() 方法出现bug ,而其在正式包中被混淆为 com.a.b 类,test() 方法也被混淆为 a() 方法,那么我们打出来的补丁包中,应该包含 com.a.b 类,其中有个修复的 a() 方法。

二、热修复要解决的问题

用户端:

  • 什么时候执行热修复

  • 怎么执行热修复(使用补丁包)?

  • Android 版本兼容问题

在开发端:

  • 补丁包是什么

  • 如何生成补丁包

  • 开启混淆之后呢?

  • 如何对比改动自动生成补丁包(gradle代码)?

三、AndFix 的流程分析

一般来说,使用类替换的方案实现的热修复都不能即时生效,非类替换的就能。这是为什么呢?我感觉是新的类需要重新加载,老的类已经加载在里面了,又不能卸载老的类。

AndFix 拿到补丁包之后,就加载补丁包,load 这些类,得到 Class 对象,读取其运行时注解获取它要替换掉的类以及其中要替换的方法。但是在 Java 层做不到这个效果,我们需要在 C/C+ 层来实现。其补丁形式如下图所示:

AndFix补丁形式

谢谢你的鼓励