Gradle构建太慢应该先检查哪里

梦雪君_3943

梦雪君_3943

2026-10-26

863人浏览

原创

先定位真瓶颈:运行./gradlew --profile build查看耗时报告,若某任务占30%以上(如mergeDebugResources、compileDebugKotlin),应优先分析其成因而非盲目调参;配置优化需匹配实际瓶颈,否则无效。

gradle构建太慢应该先检查哪里

先跑 ./gradlew --profile build,看耗时报告里哪个任务占了 30% 以上——别调任何配置,先定位真瓶颈。

为什么不能一上来就改 gradle.properties

很多人看到构建慢,第一反应是开并行、加大内存、开缓存。但实际项目里,org.gradle.parallel=true 对单模块项目几乎没用;-Xmx4g 在 GC 不频繁时也压根不生效;org.gradle.caching=true 如果本地没配 build-cache 目录或远程服务,只会默默 fallback 到无缓存状态。更常见的是:90% 的时间卡在 mergeDebugResources 或 compileDebugKotlin 这类任务上,而它们的耗时和 JVM 参数关系极小,和资源格式、Kotlin 编译器插件、模块耦合度强相关。

真正该优先检查的,是构建链路中「非预期高耗时环节」:

  • Configuration 阶段耗时高 → 说明 build.gradle 里写了太多运行时逻辑(比如遍历文件、读取环境变量、动态生成 task)
  • download 类任务排前三 → 网络或仓库配置问题,不是 Gradle 本身慢
  • transform 或 process 开头的任务持续 >10s → 资源未压缩、AAPT2 启动卡顿、或开启了冗余的代码扫描(如 lint 插入到主构建流)

怎么快速判断是不是网络/依赖下载拖慢了构建

执行 ./gradlew build --dry-run,观察输出里是否大量出现 Resolve files of configuration ':app:debugRuntimeClasspath' 这类日志。如果它反复出现且耗时长,再补一句 ./gradlew --refresh-dependencies build ——如果这次明显变慢,基本锁定是依赖解析问题。

进一步验证:

  • 打开 ~/.gradle/caches/modules-2/metadata,看对应依赖的元数据文件时间戳是否异常陈旧(比如早于你上次更新依赖的时间)
  • 手动 curl 一下 build.gradle 里 repositories 声明的 URL,例如 curl -I https://maven.aliyun.com/repository/central,确认响应头有 200 OK 且 time_namelookup 和 time_connect 都在 200ms 内
  • 检查是否误启用了 mavenLocal(),尤其当本地 ~/.m2/repository 里有损坏的 POM 文件时,Gradle 会卡在解析阶段不报错只干等

Daemon 没起作用的典型信号

运行 gradle --status,如果输出为空,或显示 No daemons are currently running,说明 Daemon 根本没活下来。这不是配置没开,而是被外力杀掉了:

  • CI 脚本里写了 gradle --stop 或 pkill -f gradle ——每次都是冷启动,构建时间天然比本地多 30%~50%
  • Android Studio 设置里勾选了 Delegate IDE build/run actions to Gradle,但又在 Terminal 里用不同 JDK 运行 ./gradlew,导致 Daemon 进程被隔离,无法复用
  • IDEA 的 Help → Edit Custom VM Options 里加了冲突参数(比如同时设了 -XX:+UseG1GC 和 -XX:+UseParallelGC),JVM 启动失败后自动降级为无 Daemon 模式

容易被忽略的「隐性卡点」:AGP 版本与资源处理

Android Gradle Plugin 8.0+ 默认启用 AAPT2 的增量编译,但如果你项目里还保留着 android.enableAapt2=false(旧版迁移残留),或者 build.gradle 中强制关了 android.experimental.useNewResourceProcessor=true,那所有资源合并都会退回到全量重处理模式。一个含 200 张图的 module,mergeDebugResources 可能从 1.2s 涨到 8.7s。

这类问题不会报错,也不会出现在 profile 报告的「Top Tasks」前列(因为它被拆成几十个子任务分散计时了),但你能在 app/build/intermediates/incremental/mergeDebugResources/ 目录下观察到每次构建都清空重来——这就是最直接的证据。

真正的提速起点,从来不是堆参数或镜像源,而是看清构建过程里哪一步在「假装工作」:是反复下载同一个依赖,还是每次都在重解压 WebP,又或者只是因为某段 Groovy 脚本在配置阶段读了三次 local.properties。盯住耗时数字,而不是配置项名字。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java Maven专题
Java Maven专题

本专题聚焦 Java 主流构建工具 Maven 的学习与应用,系统讲解项目结构、依赖管理、插件使用、生命周期与多模块项目配置。通过企业管理系统、Web 应用与微服务项目实战,帮助学员全面掌握 Maven 在 Java 项目构建与团队协作中的核心技能。

2025.09.15

4020

19

Java Maven/Gradle 构建与依赖管理合集
Java Maven/Gradle 构建与依赖管理合集

系统讲解 Java 项目构建工具的使用与进阶配置,涵盖 Maven 的 POM 文件结构、生命周期(clean/compile/package/install/deploy)与插件机制、依赖范围(compile/provided/test/runtime)与传递依赖管理、多模块聚合与继承、私有 Nexus 仓库发布,以及 Gradle 的 Groovy / Kotlin DSL 语法、Task 自定义与增量构建、依赖版本目录(Versi

2026.05.09

369

25

Java Maven/Gradle 构建与依赖管理合集
Java Maven/Gradle 构建与依赖管理合集

系统讲解 Java 项目构建工具的使用与进阶配置,涵盖 Maven 的 POM 文件结构、生命周期(clean/compile/package/install/deploy)与插件机制、依赖范围(compile/provided/test/runtime)与传递依赖管理、多模块聚合与继承、私有 Nexus 仓库发布,以及 Gradle 的 Groovy / Kotlin DSL 语法、Task 自定义与增量构建、依赖版本目录(Versi

2026.05.09

369

25

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

60

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

40

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

40

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

20

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

40

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

20

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Gradle 9 主版本升级指南
Gradle 9 主版本升级指南

共0课时 | 0人学习

Gradle 安全最佳实践
Gradle 安全最佳实践

共0课时 | 0人学习

Gradle 依赖校验手册
Gradle 依赖校验手册

共0课时 | 0人学习