关于 android-gradle-logic
面向 Android 团队的 Gradle 构建逻辑参考,介绍如何在复合构建中用约定插件复用配置。内容涵盖版本目录接线、共享配置及 AGP 9 所需调整。
主要功能
- 01在 build-logic 中使用约定插件
- 02设置版本目录
- 03匹配插件别名与 ID
- 04共享 Android 和 JVM 配置
- 05AGP 9 迁移注意事项
适用场景
- 01集中管理各 Android 模块的配置
- 02解决 build-logic 中 libs 引用缺失
- 03为 AGP 9 更新约定插件
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ rcosteira79/ android-skills --skill android-gradle-logic安装后在 Claude Code 中输入/android-gradle-logic确认已加载。
详细介绍
Android Gradle 构建逻辑
在 build-logic/ 组合构建中,通过可复用的 约定插件 集中管理构建配置,这样每个模块的 build.gradle.kts 就能精简为 plugins { alias(libs.plugins.myapp.android.library) },再加上一个 namespace。
典型示例是 nowinandroid 的 build-logic/——从它入手,而不是从头手动编写。本指南涵盖容易出错的接线细节,以及 AGP 9 的变化。
接线时容易忽略的问题
build-logic 不会继承根目录的版本目录——需要重新创建。 组合构建有自己的 settings.gradle.kts;在声明版本目录之前,根目录的 libs 在 build-logic 中不可见。否则,约定插件无法引用 libs.*,并会因 Unresolved reference: libs 而编译失败:
// build-logic/settings.gradle.kts
dependencyResolutionManagement {
versionCatalogs {
create("libs") { from(files("../gradle/libs.versions.toml")) }
}
}
从目录中应用插件
在 [plugins] 中声明约定插件的 id,以便模块通过别名应用它们。id 必须与在 build-logic 中通过 register(...) 注册的 id 相同——别名无法解析,通常就是因为两者不匹配:
# gradle/libs.versions.toml
[plugins]
myapp-android-application = { id = "myapp.android.application" }
myapp-android-library = { id = "myapp.android.library" }
myapp-android-compose = { id = "myapp.android.compose" }
本地注册的插件不需要版本——包含的构建会提供该插件,因此别名无论目录中是否声明版本,都能解析。nowinandroid 会显式写上 version = "unspecified",这样做没问题,也有助于自我说明,但并非必需。
在约定插件中一次性设置共享配置——compileSdk / minSdk / Compose / JVM 工具链,而不是在每个模块中分别设置。对于 Kotlin Android 模块,kotlin { jvmToolchain(21) } 是惯用的简洁写法,并会为 Kotlin 和 Java 编译设置工具链:
kotlin { jvmToolchain(21) }
AGP 9 的影响
上述约定插件模式面向 AGP 8。AGP 9 的多项变更会直接影响构建逻辑:移除独立的 org.jetbrains.kotlin.android 插件(Kotlin 已内置于 com.android.application / com.android.library),移除 BaseExtension 和旧版变体 API(applicationVariants → androidComponents { onVariants { … } }),将 kotlinOptions {} 移至顶层的 kotlin { compilerOptions { … } },并使 kapt 不再兼容(迁移到 KSP)。任何涉及这些内容的约定插件都需要更新。
有关具体操作,请参考专门的迁移指南,而不是在此重复步骤:纯 Android 项目请参考 Google 的 agp-9-upgrade,KMP 请参考 JetBrains 的 kotlin-tooling-agp9-migration,而 kapt → KSP 迁移步骤请参考本仓库的 gradle-build-performance 技能。
检查清单
- 在根目录的
settings.gradle.kts中将build-logic包含为组合构建(includeBuild("build-logic")) -
build-logic/settings.gradle.kts通过from(files("../gradle/libs.versions.toml"))重新创建libs目录 - 使用稳定的 id 注册约定插件,并确保
[plugins]别名 id 与其完全一致 - 在插件中一次性设置
compileSdk/minSdk/ Compose / JVM 工具链,而不是在每个模块中设置