组件化开发能够提升团队长期效率,即便只有一我的。android
承上 【掘金】Android组件化模块化在移动应用开发中 (序)app
去限制每一个library只依赖框架代码并为其添加统一的调试外壳代码,而不是变身app,浪费转换时间,也不须要写两份清单文件。框架
在此以前简单熟悉一下Gradle能使你的项目构建更快;模块化
Gradle项目的构建分为三个阶段:初始化、配置、执行。在调试时,只去加载须要调试或联合调试的 Module 这样去提升一点构建速度。组件化
Gradle在初始化阶段会首先去查找setting.gradle
文件,查找的规则以下:post
setting.gradle
文件。master
目录查找。settings.gradle
中是否有定义。若是没有,则进行单项目构建,不然进行多项目构建。多项目工程在根目录必须存在setting.gradle
文件,单项目工程则能够不须要这个文件。gradle
咱们在这个文件内去配置须要调试开发的Libraryui
include ':app'
//必要的
include ':必要的xxx'
//壳app 要加载的Library
gradle.ext.isAppMap =
[/** -1 剔除; 0 libaray; 1 APP*/
':占位' : -2,
':libraryA': 0,
':libraryB': -1,
]
gradle.ext.isDebug = true
gradle.ext.debugModelApp = false
for (String libraryName : gradle.ext.isAppMap.keySet()) {
if... 决定是否要加载libaray
}
复制代码
app的build.gradlelua
...
dependencies {
...
for (String modelName : gradle.ext.isAppMap.keySet()) {
if (gradle.ext.isDebug) {
if (gradle.ext.isAppMap.get(modelName) == 0) {
implementation project(modelName)
}
} else {
implementation project(modelName)
}
}
}
复制代码
每一个library的build.gradlespa
switch (rootProject.getLoadType(getName())) {
case -1:
return
case 0:
apply plugin: 'com.android.library'
break
}
复制代码
新建config.gradle
ext {
android = [
compileSdkVersion : 29,
......
]
}
def config = rootProject.ext.android
//相关库依赖
subprojects {
afterEvaluate { mProject ->
if (mProject.hasProperty('android')) {
android {
compileSdkVersion config.compileSdkVersion
......
defaultConfig {
if (mProject.getName().equals('app')) {
applicationId "applicationId"
}
minSdkVersion config.minSdkVersion
targetSdkVersion config.targetSdkVersion
}
}
}
dependencies {
}
}
}
复制代码
在根项目build.gradle
apply from: "config.gradle"
复制代码
这样,新建一个Module 基本不须要配置其余,就能够在该Modulen内去实现代码,不一样library页面跳转使用ARouter等。
... 未完待续...