qmsggg_BlogCollect icon indicating copy to clipboard operation
qmsggg_BlogCollect copied to clipboard

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

Open qmsggg opened this issue 6 years ago • 0 comments

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

相同点:

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

不同点:

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

qmsggg avatar Jul 22 '18 14:07 qmsggg