在App功能逐渐冗杂的今天,衍生出很多优化方案,组件化作为其中一种方式也被广泛应用,下面来一步一步实现。
一、准备工作
1. 首先我在创建完project后,除了默认创建的app model,另外创建了两个model:LoginComponent和MineComponent。(component就是组件的意思,相信来到这里的朋友都是了解过组件化原理和一些相关术语,这里就不再赘述)
2. 在创建完两个单独的component后,创建一个Base Library,因为相互通信的需要。
3. 创建后的目录就是这样的:
Android组件分布.png
二、配置依赖环境和分离运行需求
这里的配置环境就是在gradle里做一些相关操作,主要有如下操作:
- 统一每个model之间的sdk相关配置;
- 将model的两种运行方式进行分离,也就是分开处理,如果有资源文件也同样需要分开处理
- 分离的内容通常包括如下几种:
- apply运行方式的分离
- applicationId的分离
以上两种都是在model gradle里操作- app model引用library model的分离
以上一种是在app model里操作- AndroidManifest(清单文件)的分离
- 将所有model都对baseLibrary依赖
以上分离的目的是区分application和library两种运行方式所对应的需求,
而依赖的目的就是互相通信。
1. 在app的gradle.properties里,配置如下(如果有其他需求一样可以增添):
#全局配置gradle环境
compile_sdk_version = 28
min_sdk_version = 23
target_sdk_version = 28
support_sdk_version = 28.0.0
constraint_sdk_version = 1.1.3
#配置单个model是否可独立运行
loginRunAlone = false
mineRunAlone = false
2. 在
引用如上配置。
以下是引用配置和分离的截图:
除library model和主app model(也就是创建项目时自动创建的那个model)不需要进行application和library的判断,因为第一个始终以library运行;第二个始终以application运行。其他的component皆需考虑是否以单独的application运行的情况。
对上面文字清晰地解释一下吧。下面三种颜色,代表的在gradle里三种需要配置的事务:
红色框:apply的运行方式的分离;
绿色框:sdk版本的统一配置;
黄色框:applicationId的分离,component以application运行需要ID;
其中红色框和黄色框部分只需要在component里配置,library和app里都不需要;
绿色框的内容则试用于所有gradle,能配置sdk的地方都可以。
gradle配置.png
3. app model引用library model的分离
在不以单独application运行的情况下,把component作为library依赖且运行。
app_model分离依赖.png
4. AndroidManifest的分离
首先很明确,library和application的清单文件内容是不需要的,除了保存必有的包名和四大组件的注册信息。
5. 各个model对baseLibrary的依赖
app_model引用baseLibrary.png
login_model引用baseLibrary.png
mine_model引用baseLibrary.png









网友评论