在我們的實(shí)際項(xiàng)目開發(fā)中,通常在一個(gè) Project 項(xiàng)目中會(huì)存在多個(gè) Module 的情況妓局,在這些 Module 中會(huì)存在一些相同的版本依賴配置,針對(duì)進(jìn)行版本升級(jí)的時(shí)候需要逐個(gè)修改,顯得特別麻煩猪钮,所以將依賴的配置抽取出來是一個(gè)不錯(cuò)的想法。
1. 項(xiàng)目結(jié)構(gòu)
通常我們的項(xiàng)目在 Project 模式的下結(jié)構(gòu)是:
rootProject
--module1
--build.gradle
--module2
--build.gradle
...
--build.gradle
所以針對(duì)各個(gè) Module 的統(tǒng)一管理胆建,我們可以在 Project 的根目錄 build.gradle 中進(jìn)行配置烤低,或者通過新建一個(gè) config.gradle 配置來完成。
2. 在 Project 的 build.gradle 中配置
build.gradle 是針對(duì)整個(gè) Project 級(jí)別的配置眼坏,所以在 build.gradle 中進(jìn)行配置讓每個(gè) Module 去讀取配置拂玻。
- 根目錄 build.gradle 配置
- 新建 config.gradle 進(jìn)行配置
2.1 根目錄 build.gradle 配置
在 Android Studio 中的 .gradle 中支持 Groovy 語言,所以我們的配置起始就是有點(diǎn)類似于 Java 中的存儲(chǔ)配置變量宰译。
在 Gradle DSL 中通過 Project.ext 進(jìn)行 Extra Properties(額外屬性)
build.gradle
rootProject.ext{
android = [
compileSdkVersion : 28,
buildToolsVersion : "28.0.0",
applicationId : "sw.andoter.com.gradleplugindemo",
minSdkVersion : 15,
targetSdkVersion : 28,
versionCode : 1,
versionName : "1.0"
]
sdkVersion = 13
}
在具體的 Module 中使用:
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
defaultConfig {
applicationId rootProject.ext.android.applicationId
minSdkVersion rootProject.ext.android.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
這樣就可以引用了檐蚜,非常簡(jiǎn)單。但是這樣如果配置量比較大沿侈,在根目錄的 build.gradle 中進(jìn)行配置就顯得可讀性非常差闯第,所以就會(huì)使用方式二進(jìn)行配置。
2.2 新建 config.gradle 進(jìn)行配置
通過新建配置文件進(jìn)行配置缀拭,形成如下目錄:
rootProject
--module1
--build.gradle
--module2
--build.gradle
...
--build.gradle
--config.gradle
1. 選中項(xiàng)目咳短,右鍵新建 Gradle Script 腳本配置
config.gradle
rootProject.ext{
android = [
compileSdkVersion : 28,
buildToolsVersion : "28.0.0",
applicationId : "sw.andoter.com.gradleplugindemo",
minSdkVersion : 15,
targetSdkVersion : 28,
versionCode : 1,
versionName : "1.0"
]
sdkVersion = 13
}
在 Module 的配置中引用
引用配置腳本文件通過 apply from:xx,需要注意的就是 .gradle 文件的位置蛛淋,同級(jí)目錄我們直接寫文件名稱即可咙好,不同目錄需要使用相對(duì)路徑。
Module 的 build.gradle
apply from : "../config.gradle"
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
defaultConfig {
applicationId rootProject.ext.android.applicationId
minSdkVersion rootProject.ext.android.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
以后再對(duì)依賴包升級(jí)的時(shí)候直接修改 config.gradle 文件就 OK 了褐荷。
3. 綜述
縱觀上面的方式勾效,核心思想就是保存配置的數(shù)據(jù),所以不一定非要選擇在 .gradle 文件中叛甫,只要方便使用就行层宫。比如可以放在 gradle.properties中。注意 .properties 文件中存儲(chǔ)的是鍵值對(duì) key-value 形式其监。
gradle.properties
key = "I'm from gradle.properties"
在 Module 的 build.gradle 新建一個(gè) Task 進(jìn)行測(cè)試下:
task readConfig{
doLast{
println key
}
}
同樣可以進(jìn)行配置數(shù)據(jù)的讀取萌腿。