衆所周知,其實這個東西字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 沒具體應用