Android一我的的组件化:组件隔离,模块调试

一我的的组件化

组件化开发能够提升团队长期效率,即便只有一我的。android

组件隔离,模块调试

承上 【掘金】Android组件化模块化在移动应用开发中 (序)app

去限制每一个library只依赖框架代码并为其添加统一的调试外壳代码,而不是变身app,浪费转换时间,也不须要写两份清单文件。框架

在此以前简单熟悉一下Gradle能使你的项目构建更快;模块化

Gradle项目的构建分为三个阶段:初始化、配置、执行。在调试时,只去加载须要调试或联合调试的 Module 这样去提升一点构建速度。组件化

settings.gradle

Gradle在初始化阶段会首先去查找setting.gradle文件,查找的规则以下:post

  1. 查找当前构建目录下的setting.gradle文件。
  2. 若是没有找到,则去与当前目录有相同嵌套级别的master目录查找。
  3. 若是没有找到,则去父目录查找。
  4. 若是没有找到,则进行单项目构建。
  5. 若是找到了,Gradle去检查当前项目在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等。

... 未完待续...

相关文章
相关标签/搜索