热修复个人理解与整理
今天刚看完博主CSDN_LQR的一篇关于热修复的原理和实现博文,并且按照博主在末尾处的Demo进行了练习,确实是达到了热修复的效果。在此,写这篇博文的目的,只是为了个人对收获的一个整理以及方便日后的复习。
热修复原理
嗯,先从原理扯起,我的理解:原含有BUG的程序是由若干方块按顺序排列组成,当需要进行热修复的时候,程序员修改BUG之后产生新方块,再将其放进程序的生成队列中切排列在原BUG方块之前。程序读取已修复BUG的方块之后,由于该模块已完成读取,之后的BUG方块则不会被读取以此达到修复BUG的作用。(=。=好怪啊,这么理解感觉没啥问题,大概?)
修复过程
前面提到了原理,嗯,姑且是原理吧,可以知道方块的替换是热修复的重点,那么这个方块是如何产生的并且如何成功打入队列前列的,就是重中之重了。
在不使用阿里等热修复插件的前提下,读取的重点就是通过DexClassLoader去执行并读取Dex后缀的文件。实际上还有个PathClassLoader,However,嗯,这货只能加载已经安装到Android系统的apk文件,相比DexClassLoader,限制有丢丢大。
两者的源码就不贴了,直接去CSDN_LQR的博文看吧热修复——深入浅出原理与实现
Dex文件的生成,使用Android SDK build-tools目录下的工具进行协助,主要指令: dx –dex –output=dex文件完整路径 (空格) 要打包的完整class文件所在目录,这样做的前提,先把修复BUG之后的class文件及其根目录提取出来,然后会在output=地址生成.dex文件,之后使用上方链接中的Dex补丁工具类,进行文件替换工作。
其中可能也会遇到些BUG,嗯,上面的博文也有提及,注意细节就好了。接着,如果没什么问题,简单的热修复就完成啦~
呜啦啦~最近研究下阿里等热修复插件怎么玩,嗯,每天都要保持学习的尽头,不学习就是退步,加油!
PS:(╯‵□′)╯︵┻━┻ 突然发现博文链接一甩,啥都不用写了,崩了崩了。