热修复原理:
- 资源修复。通过反射的方式,创建新的AssertManager替换旧的AssertManager。【Instant Run】
- 代码修复。基于分包原理,dvm/art在加载主dex后,当需要查找某个类时,会依次从dex包数组里面查找, 我们只要创建个新的修复类,并打包成dex放在dex数组的前头,这样虚拟机加载到该类后就会直接return掉,不会再去加载旧的有bug的类。【Tinker】
- 动态链接修复。1. 在Native层,加载so时,跟代码替换的场景一样,优先加载。2. 代码替换System.load加载so的地方。
常见的热修复框架:1、阿里的百川、Sophix。2、腾讯的Tinker、QFix。