Android-模块化架构研究

1 Aug 2018


本项目研究功能模块化APP架构,基于Android系统。

代码下载地址:
https://github.com/pulque/MultModuleDemo

主要内容

1.开发痛点

2.设计理念

3.应用环境

4.原理

5.需要注意

6.存在的疑问


正文

1. 开发痛点

传统开发理念是判断权限值来判定功能模块是否可以使用,所有用到用不到的模块都打包在APP中,
并且启动应用的时候,初始化了很多不必要的功能模块。
这样就导致APP安装包很大,运行慢,内存占用高

私有化定制功能的时候,一般会复制代码单独修改维护,或者在代码中添加标识,判断定制修改。
增加代码逻辑复杂性,后期维护成本高,升级困难

编写新APP软件的时候,老APP软件的功能只能通过拷贝代码来实现功能的迁移。
迁移容易出错,同时维护多套相同代码,更新相同功能困难

2. 设计理念

针对功能模块化,使之在最大程度上进行复用。
类似七巧板,每一个板块想象成一个功能模块,板块拼凑成的图案即为APP。
实际上就是将功能的复用提高到应用层级上来整合APP。

3. 应用环境

一家软件公司可能有好几款应用软件,一般都会有相同的登录验证方式,相同的广告展示等等。
资源管理型软件,针对不同的角色,会有不同的功能模块显示。

4. 原理

基本原理:
每个功能模块设计为Module(模型),作为项目中的Library(库)。
而APP的Module只是集成各个功能模块,从而形成可编译的应用软件。
项目举例说明:
以通用的进销存软件为例,进行详细说明。
以下是功能设计图:
功能设计图
从上图可以看出,不同的功能模块通过组合,可以形成不同的APP。
以下是项目代码的截图:
代码结构图
以下是编译安装后APP的截图:
手机APP展示图
这样新开发APP就比较简单了,只要添加依赖,就可以显示不同的功能。
当然权限还是需要标识来控制。

5. 需要注意

> 各个Module中的包名不能相同。
> XML资源名字不能相同。
> 通过判断Activity名字来实现打开模块或指定页面。
详细参考LoginActivity类的attemptLogin方法
> 各个Module中的Activity不能设置为启动页,
否则安装后会显示多个相同APP。

6. 存在的疑问

> 是不是功能拆分的太细了?
> 随着需求的不断变化,Module会不会很多?
> 依赖升级build.gradle会不会很多,难以维护?
> 交叉依赖越来越多,会不会影响APP编译?
> 更改一个多APP引用的Module,能保证所有APP都能正常使用?
> 经常在各个Module中穿插编写代码,会不会对开发效率产生影响?