内容简介:当我们的项目变得越来越大,代码变得越来越臃肿,耦合会越来越多,编译速度越来越慢,开发效率也会变得越来越低,怎么办?这个时候我们就需要对旧项目进行重构,即是模块的拆分,官方的说法就是组件化。声明|作者:weixin_34138139链接:
一、背景
当我们的项目变得越来越大,代码变得越来越臃肿,耦合会越来越多,编译速度越来越慢,开发效率也会变得越来越低,怎么办?这个时候我们就需要对旧项目进行重构,即是模块的拆分,官方的说法就是组件化。
声明|作者:weixin_34138139
链接: https://blog.csdn.net/weixin_...
二、简介
那什么是组件化呢?其基本理念是:把常用的功能、控件、基础类、第三方库、权限等公共部分抽离封装,我们称之为基础组件( baselibs );把业务分成 N 个模块进行独立的管理,每一个模块我们称之为业务组件;而所有的业务组件都需要依赖于封装的基础组件,业务组件之间不做依赖,这样的目的是为了让每一个业务模块都能单独运行。而在 APP 层对整个项目的模块进行封装。
业务模块之间的跳转可以通过路由( Arouter )实现;业务模块之间的通信可以通过消息( EventBus )来实现。
三、基础搭建
1、组件框架图
2、根据组件框架图搭建的项目结构图
3、接下来介绍每个模块
项目中总共有五个 module ,包括 3 个业务模块、一个基础模块和一个 APP 壳模块。
在建好项目之后我们需要给 3 个 module 配置 “集成开发模式” 和 “组件开发模式” 的切换开关,可以在 gradle.properties 文件中定义变量 isModel , isModel=false 代表是 “集成开发模式” , isModel=true 代表是 “组件开发模式” ( 注:每次修改isModel的值后一定要Sysn才会生效 )。
1)APP 壳模块
主要就是集成每一个模块,最终打包成一个完整的 apk ,其中 gradle 做了如下配置,根据配置文件中的 isModel 字段来依赖不同的业务组件;
2)baselibs 模块
主要负责封装公共部分,如 MVP 架构、 BaseView 的封装、网络请求库、图片加载库、 工具 类以及自定义控件等;
为了防止重复依赖,所有的第三方库都放在这个模块,业务模块不做任何第三方依赖,只依赖于 baselibs 模块。
baselibs模块的结构如下:
在 baselibs 模块的 gradle 中引入的库
3)业务模块(module_news、module_video、module_me)
每一个业务模块在 “集成开发模式” 下以 library 的形式存在;在 “组件开发模式” 下以 application 的形式存在,可以单独运行。
由于每个业务模块的配置文件都差不多,下面就以 module_news 模块为例;
以下是 module_news 模块的 gradle 配置文件:
4)配置文件config.gradle ,对项目中的第三库、 app 的版本等配置
最后别忘记在工程的中build.gradle 引入该配置文件
四、业务模块之间交互
业务模块之间的跳转可以通过路由( Arouter )实现;业务模块之间的通信可以通过消息( EventBus )来实现。
1、Arouter 实现业务模块之间的跳转
我们在之前已经依赖了 Arouter (详细用法参照: github.com/alibaba/ARo… ),用它来实现跳转只需要以下两步:
第一步
- gradle 配置
第二步
- 需要指明目标页面以及要带的参数,然后在调用 navigation() 方法;
第三步
- 首先在 onCreate 方法调用 ARouter.getInstance().inject(this) 注入;
- 然后要用 @Route 注解标注页面,并在 path 变量中给页面定义一个路径;
- 最后对于传送过来的变量我们直接定义一个同名的字段用 @Autowired 变量标注, Arouter 会对该字段自动赋值
2、EventBus 实现业务模块之间的通讯
利用第三方如 EventBus 对消息进行管理。在 baselibs 组件中的 BaseActivity 、 BaseFragment 类做了对消息的简单封装,子类只需要重写 useEventBus() 返回 true 即可对事件的注册。
五、搭建过程中遇到的问题
1、AndroidManifest
我们知道 APP 在打包的时候最后会把所有的 AndroidManifest 进行合并,所以每个业务组件的 Activity 只需要在各自的模块中注册即可。
如果业务组件要单独运行,则需要单独的一个 AndroidManifest ,在 gradle 的 sourceSets 加载不同的 AndroidManifest 即可。
gradle 配置
注意:集成模式下的 AndroidManifest 不需要配置 Application ,组件模式下的 AndroidManifest 需要单独配置 Application ,并且必须继承 BaseApp 。
2、资源文件冲突的问题
不同业务组件里的资源文件的名称可能相同,所以就可能出现资源文件冲突的问题,我们可以通过设置资源的前缀来防止资源文件的冲突。
gradle 配置,以 module_news 模块为例
这样配置以后,如果我们在命名资源文件没有加前缀的时候,编译器就会提示我们没加前缀。
至此,Android 基本组件化框架已经搭建完成,如有错误之处还请指正。
五、最后
完整的项目地址:
https://github.com/iceCola7/A...阅读更多
欢迎关注我的微信技术号终端研发部,id:codeGoogler,一起交流和学习!
以上所述就是小编给大家介绍的《基于 MVP 的 Android 组件化开发框架实践》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 组件化之路—集成组件SDK
- Android组件化入门:一步步搭建组件化架构
- Android快速开发框架,基础库,样式库,组件化,组件集成
- Android组件化方案及组件消息总线modular-event实战
- 组件化实践
- 组件化架构漫谈
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算机组成与设计硬件/软件接口
[美] David A.Patterson、John L.Hennessy / 郑纬民 / 机械工业出版社 / 2007-4 / 75.00元
《计算机组成与设计硬件:软件接口》(原书第3版)是计算机组成的经典教材。全书着眼于当前计算机设计中最基本的概念,展示了软硬件间的关系,并全面介绍当代计算机系统发展的主流技术和最新成就。同以往版本一样,《计算机组成与设计硬件:软件接口》(原书第3版)采用MIPS处理器作为展示计算机硬件技术基本功能的核心。书中逐条指令地列举了完整的MIPS指令集,并介绍了网络和多处理器结构的基本内容。将CPU性能和程......一起来看看 《计算机组成与设计硬件/软件接口》 这本书的介绍吧!