Gradle 8.0+仍支持build.gradle(Groovy),但已进入维护模式:IDE语法支持弱化、官方文档全面转向Kotlin DSL、社区插件优先适配.kts,且buildSrc必须使用Kotlin DSL。

不是必须,但新项目默认生成 build.gradle.kts,且 Groovy DSL(build.gradle)在 Android Studio Giraffe 及后续版本中已明确进入维护模式,不再推荐用于新项目。
Gradle 8.0+ 是否还支持 build.gradle(Groovy)?
支持,但有明显限制:
- Android Gradle Plugin 8.0+ 仍能解析
build.gradle,但 IDE(如 Android Studio Giraffe、Hedgehog)对 Groovy 的语法高亮、跳转、补全能力大幅弱化,甚至部分重构操作会失败 - 官方文档和示例代码已全面转向 Kotlin DSL,社区插件(如
com.android.devtools.build相关扩展)优先适配.kts - Gradle 官方自 7.0 起就声明 Groovy DSL 是“legacy”,Kotlin DSL 是“first-class”构建脚本语言
build.gradle 和 build.gradle.kts 能混用吗?
可以,但不建议跨模块混用:
- 同一模块内不能同时存在
build.gradle和build.gradle.kts—— Gradle 会报错Multiple build files found - 不同模块可分别使用不同 DSL(例如根项目用
settings.gradle+build.gradle,子模块用build.gradle.kts),但会导致gradle.properties中的org.gradle.configuration-cache=true失效,且./gradlew --dry-run行为不稳定 - 混合使用时,
buildSrc必须与主构建脚本语言一致:若主模块用 Kotlin DSL,buildSrc/build.gradle.kts就必须存在且正确配置 Kotlin 编译器插件
什么情况下还能坚持用 build.gradle?
仅限以下真实场景:
- 遗留大型项目,迁移成本 > 收益,且团队无 Kotlin DSL 经验,暂无重构排期
- 依赖某个只提供 Groovy DSL 示例的闭源插件(如某些旧版 CI 工具链插件),且插件作者未更新 Kotlin 支持
- CI 环境中 Gradle 版本锁定在 6.x(如 Jenkins 旧流水线),而 Kotlin DSL 在 6.8 才初步稳定,6.5 以下基本不可用
注意:build.gradle 文件里写 Kotlin 语法(比如 ext.kotlinVersion = "1.9.0")是无效的——Groovy 解析器不会执行 Kotlin 表达式,会直接报 Could not get unknown property 'kotlinVersion' 类错误。
buildSrc 目录下必须用 .kts 吗?
是的,buildSrc 本质是一个独立的 Gradle 项目,其构建脚本必须是 buildSrc/build.gradle.kts(或 buildSrc/settings.gradle.kts),否则 Gradle 8.4+ 会拒绝加载该目录下的任何源码。这是硬性约束,不是风格建议。
容易被忽略的一点:即使你整个项目都用 build.gradle,只要加了 buildSrc,就必须把它改成 Kotlin DSL 形式,否则 ./gradlew tasks 会静默跳过 buildSrc 中定义的所有任务。











