在编程之初,相信每个人都有按照功能分包的意识,这就是最简单的模块化,而随着项目越来越大,代码逻辑越来越复杂,维护起来十分麻烦。因而组件化,插件化等技术慢慢的发展了起来,本文主要总结下自己对于模块化、组件化、插件化等概念的认识。
模块化
根据功能或者业务进行划分模块,例如网络请求模块,图片加载模块,登录模块,模块化相互之间存在依赖关系
组件化
根据业务逻辑划分,多个module,debug时可编译为多个apk,release时可编译为多个Library,可在gradle中配置debug和release的相关参数.组件间需要采用隐式通信
解决问题:
- 用于项目过大,每次编译时间长
- 用于团队多个人分工开发不同的模块
- 解耦,便于维护
在进行组件化开发时,首先需要进行基础模块和业务模块的划分,基础功能包括基础网络请求,图片加载,播放器等等,这些功能模块是所有业务模块的通用基础库。而我们进行的组件化开发,则是针对业务模块进行的。将业务拆分成一个个独立的模块,在开发时以独立app进行,整合时则作为lib进行。业务模块之间的页面跳转可以通过Route等开源框架实现,或者自己实现也可以。业务模块之间的数据通信,主要是通过Intent传值,ContentProvider,广播等形式进行。
插件化
将各个功能拆分成独立的插件,可下载插件扩展功能,主要技术难点是动态加载
解决问题
- 解决方法数超过65536问题
- 按照需要下载模块,减小项目apk的大小
热更新
主要原理和插件化差不多,都是动态加载,区别热更新是要做到bug类的替换和修复
常用操作为:资源替换,类替换,So库替换
Tinker,AndFix…
解决问题:
- 线上修复bug,一般不用于新功能的上线