组件化开发——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 ↩︎