一、背景。
当项目逐渐变大时,每次做一点小小的改动都需要重新编译整个App。组件化的产生就是为隔离各个module,使其单独运行,实现组件间解耦,单独调试。
二、多模块。
组件化之前,需要先将应用中的各个业务组件拆解成aar。形成app+lib的形式。这是组件化的第一步,所谓组件化就是让各个模块可以自由切换成application/library。
app即为整个应用的外壳子。lib1和lib2是两个业务模块。base是所有整个应用的基础组件。
可能会有疑问,当lib1想要调用lib2中的内容的时候该怎么处理呢,这个后面会说,先来看这一步。
要想自由切换每个lib的类型到底是library还是application,先修改build.gradle文件。先在project目录下新建一个.gradle文件,这个.gradle用来记录所有的build.gradle文件的配置信息,然后在project下的build.gradle文件下引入这个.gradle文件。
apply from:"config.gradle"//apply这个函数后面要传入的是一个Map<String, ?> options,当key为from时,就会去寻找这个文件。平时我们看到的key大多是plugin。
举个简单的例子,我的config.gradle文件的内容如下:
ext {
ddgjversion = [
compileSdkVersion: 26,
minSdkVersion : 16,
targetSdkVersion : 26,
buildToolsVersion: "26.0.2",
versionCode : 360,
versionName : "3.6"
]
ddgId = ["app" : "com.*****.***",
"lib": "com.*****.***",
]
}
引用:
def cfg = rootProject.ext.ddgjversion
def ddgjid = rootProject.ext.ddgjId
......
compileSdkVersion cfg.compileSdkVersion
buildToolsVersion cfg.buildToolsVersion
defaultConfig {
applicationId ddgjId["app"]
minSdkVersion cfg.minSdkVersion
targetSdkVersion cfg.targetSdkVersion
versionCode cfg.versionCode
versionName cfg.versionName
multiDexEnabled true
ndk {
abiFilters "armeabi", "x86"
}
......