众所周知,其实这个东西字2012就已经出现了。当时是携程的团队,遇到了android 的巨坑-65535问题。以后有2个解决方案。一个是Facebook为表明的dex分包方案。一个是微信表明的插件加载的方式。而热修复就是在这2个方案上衍生的。因为热修复的原理都比较多了 我在这里就不说了。在热修复中。咱们须要注意的就是对打包这个过程的一个把握,这个是比较重要的。其实原理不难,基本上你掌握了打包就成功了一半了。我是这么以为的。android
目前市面上的热修复方案:git
1 直接替换类 和资源文件。原理是直接经过反射拿到dex 的pathList 的Elements 的路径 而后进行合并便可,会优先加载没有bug的补丁。这种方案是能够蛮不错的。开源的框架是志刚老师的--NVWA ,DroidFix,RocooFix。 微信的Tinker 今年也是开源了。github
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 阿里it
https://github.com/dodola/RocooFix ---------RocooFix 志刚老师的io
https://github.com/dodola/HotFix -------HotFix QQ空间class
https://github.com/dodola/AnoleFix ------AnoleFix 相似美团的Robust 没具体应用