gradle多模块项目中定义全局共享脚本配置的核心是抽离重复逻辑、统一维护、按需复用,推荐方式包括:1.用buildsrc编写类型安全插件;2.用apply from引入公共脚本;3.用ext属性共享简单变量;4.用约定插件实现解耦复用。

在 Gradle 多模块项目中定义全局共享的脚本配置,核心思路是**把重复逻辑抽离出来,统一维护、按需复用**。不推荐在每个子模块的 build.gradle 里硬编码相同内容,而是通过几种成熟且官方推荐的方式实现“一处定义、多处生效”。
用 buildSrc 编写可复用的插件或扩展
这是最类型安全、可维护性最强的方式,适合中大型项目。
-
buildSrc是 Gradle 自动识别的源码目录(位于根目录下),其编译后的类可被所有模块的构建脚本直接使用 - 例如:新建
buildSrc/src/main/kotlin/Dependencies.kt,集中声明依赖版本和坐标:
object Versions {<br> const val kotlin = "1.9.20"<br> const val androidxCore = "1.12.0"<br>}<br><br>object Libs {<br> const val kotlinStdlib = "org.jetbrains.kotlin:kotlin-stdlib:${Versions.kotlin}"<br> const val coreKtx = "androidx.core:core-ktx:${Versions.androidxCore}"<br>}
然后在任意模块的 build.gradle.kts 中直接引用:dependencies { implementation(Libs.kotlinStdlib) }
用 apply from: 引入公共配置脚本
适合轻量级复用,比如统一设置 Java 版本、编码、仓库等基础配置。
- 在根目录新建
gradle/common-conventions.gradle(或.kts) - 内容示例:
plugins { id("java") }<br>java { sourceCompatibility = JavaVersion.VERSION_17<br> targetCompatibility = JavaVersion.VERSION_17 }<br>repositories { mavenCentral() }<br>tasks.withType<javacompile> { options.encoding = "UTF-8" }</javacompile>
在各子模块的 build.gradle 开头加上:apply from: "$rootDir/gradle/common-conventions.gradle"
在 settings.gradle 或根 build.gradle 中定义 ext 属性
适用于简单变量共享(如版本号、路径),但类型不安全,仅建议用于小型项目或临时过渡。
- 在根
build.gradle(不是settings.gradle)顶部添加:
ext {<br> kotlinVersion = "1.9.20"<br> retrofitVersion = "2.9.0"<br>}
子模块中即可使用:implementation "com.squareup.retrofit2:retrofit:$kotlinVersion"
使用约定插件(Convention Plugins)——推荐进阶方案
将通用配置封装为独立插件(Kotlin DSL 写的 build-logic 模块),比 buildSrc 更解耦、更易测试、支持跨项目复用。
- 新建模块
build-logic,应用gradlePlugin插件 - 编写一个
AndroidApplicationConventionPlugin,统一配置 Android 应用模块的 compileSdk、defaultConfig、lint 等 - 在子模块中通过
plugins { id("com.example.android-application") }引入
这种方式是 Android 官方推荐的现代 Gradle 构建组织方式,尤其适合组件化或大型团队协作项目。











