qmsggg / qmsggg_BlogCollect

仅仅只是用于学习和记录使用,里面包括了自己学习android的点点滴滴,希望自己在以后的时间能把之前由于时间原因没有完成的完成了,以此自勉。
57 stars 18 forks source link

面试之插件化相关技术,热修补技术是怎样实现的,和插件化有什么区别 #195

Open qmsggg opened 6 years ago

qmsggg commented 6 years ago

插件化相关技术,热修补技术是怎样实现的,和插件化有什么区别

相同点:

都使用ClassLoader来实现的加载的新的功能类,都可以使用PathClassLoader与DexClassLoader

不同点:

热修复因为是为了修复Bug的,所以要将新的同名类替代同名的Bug类,要抢先加载新的类而不是Bug类,所以多做两件事:在原先的app打包的时候,阻止相关类去打上CLASS_ISPREVERIFIED标志,还有在热修复时动态改变BaseDexClassLoader对象间接引用的dexElements,这样才能抢先代替Bug类,完成系统不加载旧的Bug类. 而插件化只是增肌新的功能类或者是资源文件,所以不涉及抢先加载旧的类这样的使命,就避过了阻止相关类去打上CLASS_ISPREVERIFIED标志和还有在热修复时动态改变BaseDexClassLoader对象间接引用的dexElements. 所以插件化比热修复简单,热修复是在插件化的基础上在进行替旧的Bug类