本文主要分享常见的 Gradle 编译优化手段,并提供成本,收益,推荐度等维度供参考。以帮助大家快速找到最适合自己项目情况的优化项。
文章内容介绍
每个团队或许都有那么一个或两个比较关注工程编译耗时的同学,那么这篇文章就是分享给你的。
本文主要分享常见的 Gradle 编译优化手段,并提供成本,收益,推荐度等维度供参考。以帮助大家快速找到最适合自己项目情况的优化项。
可用的编译优化观察工具
工欲善其事,必先利其器。本章节介绍可以让你观测编译情况的工具。
Gradle Build Scan
Gradle Build Scan 是分析编译耗时不得不了解的一个官方工具。它提供了几乎所有你想了解的信息:
- 编译耗时
- task 实现,task 的前后依赖关系
- task 缓存命中情况
- task 执行时间线
- 两个 gradle 执行对比,可用于对比两个构建之间无法复用缓存的 task 究竟是什么参数不同导致。这个功能最近收费了,可恶啊
如何使用
方式一:gradle 命令末尾加上 --scan
参数
方式二:在工程根目录 settings.gradle
增加如下声明:
apply plugin: com.gradle.enterprise.gradleplugin.GradleEnterprisePlugin
gradleEnterprise {
buildScan {
termsOfServiceUrl = "https://gradle.com/terms-of-service"
termsOfServiceAgree = "yes"
// isOpenDebugLog 控制是否开启默认发布scan链接
publishAlwaysIf(isOpenDebugLog)
}
}
项目编译数据分享
在不同的时间段,我对产品的主工程编译进行了集中投入优化,效果还不错:
编译耗时中位数 1.5min -> 0.5min(中位数可以比较好的体现增量编译的耗时):
编译平均耗时 2.5min -> 1.6min(本地):
编译平均耗时 5.4min -> 4.1min (蓝盾):
当然,项目是不断在增长和劣化的,停止优化后编译耗时又会开始缓慢上涨。
可行的优化项
1. 云编译——真正的工程学
电脑很卡,那就换台电脑。——鲁迅
这里云构建指的是:购买云开发机,通过 ssh 和 rsync 工具完成源码推送,编译,产物拉取。
Sickworm 锐评
- 收益:大
- 成本:小,一次配置,终身受用(配置耗时 1 小时左右)。
- 综合推荐度: