前言
在日常开发过程中,当我们建立一个多Module的Android项目时,传统配置方式需在每个Module的build.gradle.kts中重复编写编译版本、依赖版本、插件版本等配置,不仅导致冗余代码,还易引发版本不一致、维护成本高等问题。本文将介绍基于Kotlin DSL的统一配置方案,通过Version Catalog + 全局配置文件的组合,实现全项目配置的集中管理与高效维护。
一、目的与意义
- 集中管理编译配置(
compileSdk、minSdk等); - 子Module直接复用全局配置,无需重复编写;
- 支持灵活扩展,适配多Module(应用模块 + 库模块)场景;
- 遵循Kotlin DSL语法规范,保证配置类型安全。
二、实现步骤
-
编写全局配置文件
config.gradle.kts
在项目根目录创建名称为config.gradle.kts的文件,在该文件内集中定义编译配置、通用配置,通过extra属性将其暴露给子Module,示例内容如下:
extra["androidCompileSdkVersion"] = 34
extra["androidApplicationId"] = "com.dev.xxx"
extra["androidMinSdkVersion"] = 26
extra["androidTargetSdkVersion"] = 34
extra["androidVersionCode"] = 1
extra["androidVersionName"] = "V1.0.0"
-
在项目中引用
config.gradle.kts配置文件
在项目的build.gradle.kts脚本文件中统一引入插件和加载全局配置文件:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.jetbrains.kotlin.android) apply false
alias(libs.plugins.android.library) apply false
}
apply(from = "config.gradle.kts")
-
在子Module中进行统一配置
在项目的子Module(app/module_login等)中,我们无需重复编写配置,直接引用根项目的extra属性即可。
- 应用模块(app/build.gradle.kts)
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.jetbrains.kotlin.android)
}
android {
namespace = "com.dev.mvvmbaseproject"
compileSdk = rootProject.extra["androidCompileSdkVersion"] as Int
defaultConfig {
applicationId = rootProject.extra["androidApplicationId"] as String
minSdk = rootProject.extra["androidMinSdkVersion"] as Int
targetSdk = rootProject.extra["androidTargetSdkVersion"] as Int
versionCode = rootProject.extra["androidVersionCode"] as Int
versionName = rootProject.extra["androidVersionName"] as String
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
...
}
dependencies {
implementation(libs.androidx.core.ktx)
...
}
- 其它Module(module-xx/build.gradle.kts)
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.jetbrains.kotlin.android)
}
android {
namespace = "com.dev.base"
compileSdk = rootProject.extra["androidCompileSdkVersion"] as Int
defaultConfig {
minSdk = rootProject.extra["androidMinSdkVersion"] as Int
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
}
...
}
dependencies {
implementation(libs.androidx.core.ktx)
...
}
三、需要掌握的知识
在时间充裕的情况下,你可以先了解以下知识,这样能够快速理解本文内容:
- 熟悉Android Gradle插件(AGP)基础配置;
- 了解Kotlin DSL语法,明白其与Groovy DSL的区别;
- 项目已升级为Kotlin DSL构建脚本(
.gradle.kts后缀)。