众所周知,其实这个东西字2012就已经出现了。当时是携程的团队,遇到了android 的巨坑-65535问题。之后有2个解决方案。一个是Facebook为代表的dex分包方案。一个是微信代表的插件加载的方式。而热修复就是在这2个方案上衍生的。由于热修复的原理都比较多了 我在这里就不说了。在热修复中。我们需要注意的就是对打包这个过程的一个把握,这个是比较重要的。其实原理不难,基本上你掌握了打包就成功了一半了。我是这么觉得的。
目前市面上的热修复方案:
1 直接替换类 和资源文件。原理是直接通过反射拿到dex 的pathList 的Elements 的路径 然后进行合并即可,会优先加载没有bug的补丁。这种方案是可以蛮不错的。开源的框架是志刚老师的--NVWA ,DroidFix,RocooFix。 微信的Tinker 今年也是开源了。
2 .Native hook 该方案首先通过对比修改前后的apk文件得出两个dex文件中同时存在的方法,如果修改过,则利用自定义的Annotation(MethodReplace)标注,最后将这些修改过的方法打包成补丁文件。然后,在将补丁下发到App后,就可以跟据补丁文件中的注解来找到所有需要替换的方法,然后调用native方法去实现方法的替换。著名代表阿里--AndFix.
2中方案各有优势。都是比较成熟的方案。一个是直接粒度在class级别 一个是可以在Method 级别。个人倾向于第一种 ,因为第二种有些时候资源文件不能很好的替换。微信的Tinker效果看来是蛮不错的。
地址:https://github.com/Tencent/tinker -------Tinker 微信
https://github.com/bunnyblue/DroidFix#moreinfo -------- DroidFix
https://github.com/alibaba/AndFix ---------AndFix 阿里
https://github.com/dodola/RocooFix ---------RocooFix 志刚老师的
https://github.com/dodola/HotFix -------HotFix QQ空间
https://github.com/dodola/AnoleFix ------AnoleFix 类似美团的Robust 没具体应用