組件化開發——Android studio gradle配置文件統一管理
在組件化開發中儘可能滿足以下要求1:
- 添加新組件必須簡單(通常會經常發生的)
- 維護組件配置必須簡單
所以簡化gradle配置文件是很有必要的,通過如下方式可以省略module中gradle大量代碼
第一步:新建統一配置文件
在項目根目錄中新建統一配置文件 config.gradle
(名字可自定義)
代碼核心:
- 使用
ext
統一管理常量 - 使用
subprojects
和hasProperty
統一配置所有子build.gradle
中android
字段公有內容 - 使用
project.projectDir.name
獲取不同build.gradle
所在module名稱,以此可區分不同build.gradle
中android
字段差異代碼
/**
* config.gradle用於統一配置項目中各常量和依賴庫
* 使用在項目根build.gradle上方添加 apply from: "config.gradle"
* 然後使用"rootProject.ext"對象調用各屬性,例如 app.compileSdkVersion、daggerLibs.api、daggerLibs.values()
*/
ext {
//*************************Module配置管理**************************
app = [compileSdkVersion: 28,
applicationId : "com.***.mvp",
minSdkVersion : 15,
targetSdkVersion : 28,
versionCode : 1,
versionName : "1.0",
buildToolsVersion: '28.0.3',]
//*************************引用類庫版本號管理**************************
//*************************引用類庫版本號管理**************************
dependVersion = [kotlin_version : '1.3.31',
dagger_version : '2.21',
dagger_android_version : '2.x',
......
]
//*************************引用類庫版本號管理**************************
//*************************類庫maven地址**************************
kotlinLibs = [kotlin_stdlib_jdk8: "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$dependVersion.kotlin_version"]
......
//dagger依賴包
daggerLibs = [api : "com.google.dagger:dagger:$dependVersion.dagger_version",
compiler : "com.google.dagger:dagger-compiler:$dependVersion.dagger_version",
dagger_android : "com.google.dagger:dagger-android:$dependVersion.dagger_android_version",
dagger_android_support : "com.google.dagger:dagger-android-support:$dependVersion.dagger_android_version",
dagger_android_processor: "com.google.dagger:dagger-android-processor:$dependVersion.dagger_android_version"]
//*************************類庫maven地址**************************
}
//在所有子build.gradle(module)文件中添加android 字段
subprojects {
afterEvaluate { project ->//回調
if (project.hasProperty('android')) {//存在android 字段
android {
compileSdkVersion app.compileSdkVersion
defaultConfig {
switch (project.projectDir.name){//區分不同build.gradle差異代碼
case "app":
applicationId app.applicationId
break
default:
break
}
minSdkVersion app.minSdkVersion
targetSdkVersion apptargetSdkVersion
versionCode app.versionCode
versionName app.versionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
buildToolsVersion appbuildToolsVersion
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments = [AROUTER_MODULE_NAME: project.getName()]
}
}
}
}
}
}
}
第二步:項目根build.gradle
在項目根build.gradle
文件頭部添加
apply from: "config.gradle"
......
第三步:子build.gradle
子build.gradle
(module中的build.gradle)
apply plugin: 'com.android.application'
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
testImplementation junitLibs.junit
androidTestImplementation androidxLibs.runner
androidTestImplementation androidxLibs.espresso_core
implementation androidxLibs.constraintlayout
implementation project(':baselibrary')
annotationProcessor daggerLibs.compiler
annotationProcessor arouterLibs.compiler
annotationProcessor butterknifeLibs.compiler
}
參考
Jeroen Mols:Modularization - Lessons learned
Sam Edwards:Kotlin + buildSrc for Better Gradle Dependency Management
JessYanCoding: MVPArms
Jeroen Mols:Modularization - Lessons learned ↩︎