一层扶、模塊化與組件化
- 模塊化
簡單來說,模塊化就是將一個程序按照其功能做拆分,分成相互獨立的模塊颁独,以便于每個模塊只包含與其功能相關(guān)的內(nèi)容场晶。模塊我們相對熟悉,比如登錄功能可以是一個模塊,搜索功能可以是一個模塊,汽車的發(fā)送機(jī)也可是一個模塊.,如下圖:
- 組件化
一個復(fù)雜系統(tǒng)的構(gòu)建最后就是組件集成的結(jié)果.每個組件都可以有自己獨立的版本,可以獨立的編譯,測試,打包和部署揍堰,如下圖:
二鹏浅、組件化配置
-
1.build.gradle同級目錄下創(chuàng)建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" ] //統(tǒng)一supportLibrary supportLibrary = "26.1.0" //作為組件時需要的依賴 dependencies = [ "appcompat-v7" : "com.android.support:appcompat-v7:${supportLibrary}", ] }
-
在全局的build.gradle中引入ext
//相當(dāng)于引入頭文件 將 config中的內(nèi)容引入進(jìn)來 apply from: "config.gradle"
-
模塊配置
-
根據(jù)isModule切換集成模式和組件模式
//根據(jù)isModule標(biāo)簽動態(tài)的切換 集成/組件模式 if (isModule){ apply plugin: 'com.android.library' }else{ apply plugin: 'com.android.application' }
-
引入ext里面的內(nèi)容
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')
}
}