mcpField
G
gradle-build-performance

gradle-build-performance

github.com/rcosteira79开发168154 次安装6 周前更新
代码仓库

关于 gradle-build-performance

面向 Android 与 Gradle 开发者的构建性能参考,介绍如何测量并改善构建耗时。重点包括定位慢速阶段、配置缓存实践、依赖解析及 AGP 9 对 kapt 迁移到 KSP 的要求。

主要功能

  1. 01基线测量与 Build Scan 流程
  2. 02配置缓存使用指引
  3. 03延迟注册任务
  4. 04使用约定插件的建议
  5. 05依赖解析实践
  6. 06AGP 9 下 kapt 转 KSP 指引

适用场景

  1. 01定位 Gradle 构建中的耗时阶段
  2. 02减少重复的配置工作
  3. 03为 AGP 9 更新注解处理方式

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/rcosteira79/android-skills --skill gradle-build-performance

安装后在 Claude Code 中输入/gradle-build-performance确认已加载。

详细介绍

Gradle 构建性能

本文介绍工作流规范,以及影响显著且容易出错的模式;不涵盖常见配置项(org.gradle.caching、org.gradle.parallel、org.gradle.jvmargs、android.nonTransitiveRClass、kapt → ksp)。

工作流:测量基线(干净构建 + 增量构建)→ ./gradlew assembleDebug --scan(或使用 --profile 生成不上传的报告)→ 在 Build Scan 时间线上找出耗时阶段(配置/执行/依赖解析)→ 每次只应用一项优化 → 再次测量。批量修改会让你无法判断哪些改动起了作用。

配置阶段——成本最低的优化

  • 配置缓存(org.gradle.configuration-cache=true,AGP 8+)会在输入未变化时跳过整个配置阶段。先设置 org.gradle.configuration-cache.problems=warn,没有问题后再改为 fail。
  • 配置期间不要进行 I/O。 在配置时调用 file("version.txt").readText()、进行网络调用或使用 exec {},都会破坏配置缓存并拖慢每次构建;应将其推迟到执行阶段:providers.fileContents(layout.projectDirectory.file("version.txt")).asText。
  • 延迟注册任务——使用 tasks.register("x") { … }(仅当任务位于执行图中时才配置),不要使用 tasks.create("x") { … }(会立即配置)。
  • 使用约定插件,而不是 subprojects {} / allprojects {}——这些根构建块会立即评估每个子项目。将共享配置移至约定插件中(参见 android-skills:android-gradle-logic)。

kapt → KSP(AGP 9 上必须迁移)

KSP 的速度约为 kapt 的 2 倍,且 AGP 9 要求必须完成迁移——它内置了 Kotlin 支持,并且与 org.jetbrains.kotlin.kapt 不兼容。请迁移到 KSP(AGP 9 上需要 KSP 2.3.1+;Hilt / Room / Moshi 均支持),或者对于没有对应 KSP 实现的注解处理器,改用 com.android.legacy-kapt(版本与 AGP 相同)。有关 AGP 9 的更多机制,请参阅 JetBrains 的 kotlin-tooling-agp9-migration 技能。

依赖解析

  • 固定版本——动态版本 1.0.+ 或 -SNAPSHOT 会在每次构建时触发网络解析检查。请固定为 1.2.3。
  • 仓库顺序——Gradle 按声明顺序检查仓库;将使用最多的仓库放在前面(google(),然后是 mavenCentral(),第三方仓库放在最后)。

一个合理的 gradle.properties 基线

org.gradle.configuration-cache=true
org.gradle.caching=true
org.gradle.parallel=true
org.gradle.jvmargs=-Xmx4g -XX:+UseParallelGC
android.nonTransitiveRClass=true

评论

支持 Markdown