一、热修复演示
打包之后补丁包,里面类名和方法名都要根据 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+ 层来实现。其补丁形式如下图所示: