一、模块化与组件化
- 模块化
简单来说,模块化就是将一个程序按照其功能做拆分,分成相互独立的模块,以便于每个模块只包含与其功能相关的内容。模块我们相对熟悉,比如登录功能可以是一个模块,搜索功能可以是一个模块,汽车的发送机也可是一个模块.,如下图:
- 组件化
一个复杂系统的构建最后就是组件集成的结果.每个组件都可以有自己独立的版本,可以独立的编译,测试,打包和部署,如下图:
二、组件化配置
-
1.build.gradle同级目录下创建config.gradle
ext { // false: 组件模式 // true :集成模式 isModule = true //定义Android闭包下需要用到的全局配置 android = [ compileSdkVersion: 26, minSdkVersion : 14, targetSdkVersion : 26, versionCode : 1, versionName : "1.0" ] //定义所有模块的appid appId = ["app" : "com.hubin.text", "module1": "com.hubin.module01", "module2" : "com.hubin.module02" ] //统一supportLibrary supportLibrary = "26.1.0" //作为组件时需要的依赖 dependencies = [ "appcompat-v7" : "com.android.support:appcompat-v7:${supportLibrary}", ] }
-
在全局的build.gradle中引入ext
//相当于引入头文件 将 config中的内容引入进来 apply from: "config.gradle"
-
模块配置
-
根据isModule切换集成模式和组件模式
//根据isModule标签动态的切换 集成/组件模式 if (isModule){ apply plugin: 'com.android.library' }else{ apply plugin: 'com.android.application' }
-
引入ext里面的内容
def config= rootProject.ext.android def appId = rootProject.ext.appId
-
sdk版本
compileSdkVersion config.compileSdkVersion
-
defaultConfig闭包配置
defaultConfig { minSdkVersion config.minSdkVersion targetSdkVersion config.targetSdkVersion versionCode config.versionCode versionName config.versionName testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" //添加一条 boolean类型的变量 buildConfigField("boolean","isModule",String.valueOf(isModule)) //组件模式下 if (!isModule){ applicationId appId['module02'] } //资源配置 sourceSets{ main{ //在组件模式下 使用不同的manifest文件 if(!isModule){ manifest.srcFile 'src/main/module/AndroidManifest.xml' java.srcDirs 'src/main/module/java','src/main/java' }else{ manifest.srcFile 'src/main/AndroidManifest.xml' } } } }
-
app模块配置
dependencies {
...
if (isModule){ //集成模式下添加其它模块的依赖
implementation project(':module02')
implementation project(':module01')
}
}