Anroid 组件化原理及实现

在Android大型项目开发中,一个项目往往是由多人分工合作而成,每个程序员负责不同的模块,每个人的开发都是一个可独立运行的apk项目文件,开发完成后将所有人的项目合并而成。

传统的项目架构中,往往如图所示:

在这里插入图片描述
这样的项目结构不是很好,因为某个重要模块删除或修改时,会影响到其他模块的使用甚至引起连锁错误,耦合度很高。组件化的出现解决了类似的问题。组件化采用了如下的项目结构:

在这里插入图片描述

通过Android Studio可以将每个可以独立运行的App转换成一个库(library),主App通过基础库来调用这些模块。当任意一个模块失效或修改时,不会影响到其他任何模块功能的正常运行。

下面来实现一个类似的简单Demo:

1、在项目右击后点击Module,之后选择左边(Phone & Tablet Module),左边为新建Module,右边为新建Lib。生成后的Module就是一个可独立运行的模块(一个独立的App)

在这里插入图片描述在这里插入图片描述
2、新建一个componentLib库,在刚才同样的界面中点击右边(Android Library),这个库用来负责管理和负责主App与模块之间的连接与通信。

3、新建完成后首先在gradle.properties添加全局配置信息,并设置模块为是否可独立运行。(注:这里我配置了loginAlone和mineAlone是因为我一共新建了2个模块,下面演示只拿第一个进行配置演示,另一个操作完全一样)

在这里插入图片描述
4、在此说明一下,一个模块既可以是可独立运行的App项目,也可以是个Lib,在组件化合成时,所有的模块都需转换成Lib库,供主App调用,只需要在build.gradle中稍作修改,既可以控制它是独立的app或lib.

修改(1):
在这里插入图片描述同步后会发现这个项目已经变成一个Lib库了
在这里插入图片描述
如果将gralde.properties配置文件中的loginAlone改为true,会发现:
在这里插入图片描述
又变成一个可独立运行的App了,一个小绿点和三条竖线的区别。

修改(2):

在这里插入图片描述
将下面的编译版本进行修改,值为gralde.properties中所设置的值,(注意:模块的编译版本,最小编译版本等信息都要相同,并与主App的信息也要相同)

修改(3):在下方的android{}中添加:
在这里插入图片描述因为此时的项目已经变成了一个Lib了,因此AndroidManifest.xml文件自然也要修改,这里判断它是否为Lib库而执行不同的AndroidManifest.xml文件。

在main下面新建一个manifest文件夹,放入AndroidManifest.xml文件,内容:
在这里插入图片描述
5、将刚刚新建的componentLib库添加到模块中。右击模块项目,点击Open Module Settings,如图:
在这里插入图片描述点击Module Dependency后选择componentLib,确定后即可添加此模块。

6、接下来就是撸码了,首先在componentLib中添加接口类:

在这里插入图片描述
然后让模块去实现这个接口,这里具体方法为Intent跳转(由于刚刚导入了componentLib库,所以可以找得到该接口,如果找不到,说明刚刚导入库失败)

在这里插入图片描述
7、在componentLib库新建ServiceFactory类用于管理所有的模块方法。(代码过多,Demo中查看)

8、将componentLib库,模块库全部引入主app中,与第5步相同。在主App中实现自己的Application方法,并在里面调用方法:
在这里插入图片描述
这方法首先遍历所有的模块并获取实例方法,然后调用他们的initialize方法完成初始化,完成服务的添加,最终主App调用:

在这里插入图片描述
完成!

运行的流程是:

在这里插入图片描述
Demo地址:https://github.com/lyx19970504/componentization

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哒哒呵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值