1.组件化
即模块化
定义:将项目拆成多个 module 开发,可让一个功能、业务对应一个组件
以前的 Android 开发不是现在这样⽤ gradle 的,⽤的是 ant,做模块拆分⽐较麻烦
现在有了 gradle,拆模块⾮常⽅便了。不过模块化开发是在 gradle 到来之前就有了的
组件化和模块化其实是⼀回事
另外不同的⼈对于它的定义是不⼀样的
2.插件化
App 的部分功能模块在打包时并不以传统⽅式打包进 apk ⽂件中,⽽是以另⼀种形
式⼆次封装进 apk 内部,或者放在⽹络上适时下载,在需要的时候动态对这些功能
模块进⾏加载,称之为插件化。
这些单独⼆次封装的功能模块 apk ,就称作「插件」,初始安装的 apk 称作「宿主」。
插件化是组件化的更进⼀步推进。
插件化原理:动态加载
通过⾃定义 ClassLoader 来加载新的 dex ⽂件,从⽽让原本没有的类可以被使⽤,这就是插件化的原理。
eg:两个module,其中一个module中导入另一个module的apk,并加载其中的dex文件,来使用另一个module中的类。
事实上,模块化与组件化之间没有明显的界限,组件化就是对不同模块的进一步细分,将一些模块的通用功能剥离出来形成一个组件,进一步提高程序的复用性。
- 模块化是业务导向,主要针对业务逻辑层的拆分
- 组件化是功能导向,主要针对项目功能的拆分和重用
3.热修复
热修复和插件化的区别
- 插件化的内容在原 App 中没有,⽽热更新是原 App 中的内容做了改动
- 插件化在代码中有固定的⼊⼝,⽽热更新则可能改变任何⼀个位置的代码
类的加载原理
tip:只有自己ClassLoader加载的类才会被存入缓存;3是指自己来加载类
不难看出,若是父ClassLoader和子ClassLoader都有同一个类,那么必定会加载父ClassLoader中的类
热修复原理
将更改后的class文件,⽤ d8 把指定的需要修复的class成dex文件作为补丁包,将它插到dexElements数组的最前面;这样,系统会先加载前面的第一个1.class文件,等到后面加载到有Bug的1.class的时候,会发现前面已经加载过一次1.class了,所以就不会加载这次有Bug的1.class了,这就完成了热修复。