基于 MVP 的 Android 组件化开发框架实践

栏目: 编程工具 · 发布时间: 7年前

内容简介:当我们的项目变得越来越大,代码变得越来越臃肿,耦合会越来越多,编译速度越来越慢,开发效率也会变得越来越低,怎么办?这个时候我们就需要对旧项目进行重构,即是模块的拆分,官方的说法就是组件化。声明|作者:weixin_34138139链接:

一、背景

当我们的项目变得越来越大,代码变得越来越臃肿,耦合会越来越多,编译速度越来越慢,开发效率也会变得越来越低,怎么办?这个时候我们就需要对旧项目进行重构,即是模块的拆分,官方的说法就是组件化。

声明|作者:weixin_34138139

链接: https://blog.csdn.net/weixin_...

二、简介

那什么是组件化呢?其基本理念是:把常用的功能、控件、基础类、第三方库、权限等公共部分抽离封装,我们称之为基础组件( baselibs );把业务分成 N 个模块进行独立的管理,每一个模块我们称之为业务组件;而所有的业务组件都需要依赖于封装的基础组件,业务组件之间不做依赖,这样的目的是为了让每一个业务模块都能单独运行。而在 APP 层对整个项目的模块进行封装。

业务模块之间的跳转可以通过路由( Arouter )实现;业务模块之间的通信可以通过消息( EventBus )来实现。

三、基础搭建

1、组件框架图

基于 MVP 的 Android 组件化开发框架实践

2、根据组件框架图搭建的项目结构图

基于 MVP 的 Android 组件化开发框架实践

3、接下来介绍每个模块

项目中总共有五个 module ,包括 3 个业务模块、一个基础模块和一个 APP 壳模块。

在建好项目之后我们需要给 3 个 module 配置 “集成开发模式” 和 “组件开发模式” 的切换开关,可以在 gradle.properties 文件中定义变量 isModel , isModel=false 代表是 “集成开发模式” , isModel=true 代表是 “组件开发模式” ( 注:每次修改isModel的值后一定要Sysn才会生效 )。

1)APP 壳模块

主要就是集成每一个模块,最终打包成一个完整的 apk ,其中 gradle 做了如下配置,根据配置文件中的 isModel 字段来依赖不同的业务组件;

基于 MVP 的 Android 组件化开发框架实践

2)baselibs 模块

主要负责封装公共部分,如 MVP 架构、 BaseView 的封装、网络请求库、图片加载库、 工具 类以及自定义控件等;

为了防止重复依赖,所有的第三方库都放在这个模块,业务模块不做任何第三方依赖,只依赖于 baselibs 模块。

baselibs模块的结构如下:

基于 MVP 的 Android 组件化开发框架实践

在 baselibs 模块的 gradle 中引入的库

基于 MVP 的 Android 组件化开发框架实践

3)业务模块(module_news、module_video、module_me)

每一个业务模块在 “集成开发模式” 下以 library 的形式存在;在 “组件开发模式” 下以 application 的形式存在,可以单独运行。

由于每个业务模块的配置文件都差不多,下面就以 module_news 模块为例;

以下是 module_news 模块的 gradle 配置文件:

基于 MVP 的 Android 组件化开发框架实践

4)配置文件config.gradle ,对项目中的第三库、 app 的版本等配置

基于 MVP 的 Android 组件化开发框架实践

基于 MVP 的 Android 组件化开发框架实践

基于 MVP 的 Android 组件化开发框架实践

最后别忘记在工程的中build.gradle 引入该配置文件

基于 MVP 的 Android 组件化开发框架实践

四、业务模块之间交互

业务模块之间的跳转可以通过路由( Arouter )实现;业务模块之间的通信可以通过消息( EventBus )来实现。

1、Arouter 实现业务模块之间的跳转

我们在之前已经依赖了 Arouter (详细用法参照: github.com/alibaba/ARo… ),用它来实现跳转只需要以下两步:

第一步

  • gradle 配置

    基于 MVP 的 Android 组件化开发框架实践

第二步

  • 需要指明目标页面以及要带的参数,然后在调用 navigation() 方法;

基于 MVP 的 Android 组件化开发框架实践

第三步

  • 首先在 onCreate 方法调用 ARouter.getInstance().inject(this) 注入;
  • 然后要用 @Route 注解标注页面,并在 path 变量中给页面定义一个路径;
  • 最后对于传送过来的变量我们直接定义一个同名的字段用 @Autowired 变量标注, Arouter 会对该字段自动赋值

基于 MVP 的 Android 组件化开发框架实践

2、EventBus 实现业务模块之间的通讯

利用第三方如 EventBus 对消息进行管理。在 baselibs 组件中的 BaseActivity 、 BaseFragment 类做了对消息的简单封装,子类只需要重写 useEventBus() 返回 true 即可对事件的注册。

五、搭建过程中遇到的问题

1、AndroidManifest

我们知道 APP 在打包的时候最后会把所有的 AndroidManifest 进行合并,所以每个业务组件的 Activity 只需要在各自的模块中注册即可。

如果业务组件要单独运行,则需要单独的一个 AndroidManifest ,在 gradle 的 sourceSets 加载不同的 AndroidManifest 即可。

基于 MVP 的 Android 组件化开发框架实践

gradle 配置

基于 MVP 的 Android 组件化开发框架实践

注意:集成模式下的 AndroidManifest 不需要配置 Application ,组件模式下的 AndroidManifest 需要单独配置 Application ,并且必须继承 BaseApp 。

2、资源文件冲突的问题

不同业务组件里的资源文件的名称可能相同,所以就可能出现资源文件冲突的问题,我们可以通过设置资源的前缀来防止资源文件的冲突。

gradle 配置,以 module_news 模块为例

基于 MVP 的 Android 组件化开发框架实践

这样配置以后,如果我们在命名资源文件没有加前缀的时候,编译器就会提示我们没加前缀。

至此,Android 基本组件化框架已经搭建完成,如有错误之处还请指正。

五、最后

完整的项目地址:

https://github.com/iceCola7/A...

阅读更多

一波Flutter酷炫特效来袭

金三银四,2019最新面试实战总结

从来不纠结算法,冒泡 排序 这样优化?

动画:一招学会TCP的三次握手和四次挥手

关于Gradle, 搞定Groovy闭包这一篇就够了

欢迎关注我的微信技术号终端研发部,id:codeGoogler,一起交流和学习!


以上所述就是小编给大家介绍的《基于 MVP 的 Android 组件化开发框架实践》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

改变未来的九大算法

改变未来的九大算法

[美] 约翰.麦考密克 / 管策 / 中信出版社 / 2013-6 / 39.00元

Google得出的搜索结果是如何产生的? 百度为何会陷入“搜索门”,又是什么机制使然? 身处在大数据时代的我们,究竟该如何应对变化莫测的世界? …… 没有满篇的专业术语,第一次让我们通过简单明了的语言、生动的例证了解支撑计算机王国的灵魂支柱——9大算法,包括人工智能、数据压缩,以及Google著名的PageRank等。 本书精彩地介绍了搜索引擎、PageRank、公开......一起来看看 《改变未来的九大算法》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具