热文导读
1、问题
在已经开发过几个项目的童鞋,如果这时需要重新开发一个新项目,是否需要自己重新搭建框架呢,还是从老项目中拷贝粘贴?
我们是否可以封装一个底层的lib库,这个底层的公共基础库 包括了一些第三方库(如: okhttp, retrofit2, glide 等)的初始化及简单的封装和一些公共的base类.这样我们重新开发一个新项目只要依赖这个库就马上可以进行业务逻辑的开发了.
组件化简单概括就是把一个功能完整的 App 或模块拆分成多个子模块, 每个子模块可以独立编译和运行, 也可以任意组合成另一个新的 App 或模块, 每个模块即不相互依赖但又可以相互交互, 遇到某些特殊情况甚至可以升级或者降级.
大家可以点击该文章查看 [组件化框架简介] :https://www.jianshu.com/p/40e745038471
2、前言
从今年开始接触组件化项目,刚开始感觉组件化非常的高大上,经过一段时间的了解,现在对组件化终于有了一定的了解,为了能更熟悉运用于实际的项目中,决定自己写一个demo框架,也想解决上述的问题,这章文档主要是对我所学习的内容做一个总结,巩固Android的一些基础知识,非常适合初学者,并且架构简单,学习成本低,对于一个急需快速组件化拆分的项目是很适合的. 望高手们多指教!
附上 Demo地址 Github : https://github.com/tome34/frameDemoMo2
请使用 Android studio 3.0 以上版本
老规则,先上效果图
备注:该Demo只完成十分之一,有时间会一直更新
3、demo 架构详解
上图是组件化工程模型,下面会列举一些组件化工程中用到的名词的含义:
-
集成模式: 所有的业务组件被“app壳工程”依赖,组成一个完整的APP;
-
组件模式: 可以独立开发业务组件,每一个业务组件就是一个APP;
-
app壳工程: 负责管理各个业务组件,和打包apk,没有具体的业务功能;
-
业务组件: 根据公司具体业务而独立形成一个的工程;
-
Main组件:属于业务组件,指定APP启动页面、主界面 ;
-
Common组件: 也就是功能组件(component_base 模块),支撑业务组件的基础,提供多数业务组件需要的功能,例如提供网络请求功能;
-
component_data组件: 这里我存放了与项目相关的公共数据,例如bean的基类,IntentKV存数据的键值对等.
-
SDK组件: 集成微信,支付宝支付,分享,推送等常用的第三方框架.
组件化的优点
Android APP组件化架构的目标是告别结构臃肿,让各个业务变得相对独立,业务组件在组件模式下可以独立开发,而在集成模式下又可以变为arr包集成到“app壳工程”中,组成一个完整功能的APP;
从组件化工程模型中可以看到,业务组件之间是独立的,没有关联的,这些业务组件在集成模式下是一个个library,被app壳工程所依赖,组成一个具有完整业务功能的APP应用,但是在组件开发模式下,业务组件又变成了一个个application,它们可以独立开发和调试,由于在组件开发模式下,业务组件们的代码量相比于完整的项目差了很远,因此在运行时可以显著减少编译时间。
这是组件化工程模型下的业务关系,业务之间将不再直接引用和依赖,而是通过“路由”这样一个中转站间接产生联系,而Android中的路由实际就是对URL Scheme的封装;
对阿里巴巴的Arouter不熟悉的可以点击了解:https://github.com/alibaba/ARouter
4、项目中base基类和Libraries的简介
项目目录.png