【Gradle-10】不可忽视的构建分析

1、前言

构建性能对于生产力至关重要。

随着项目越来越复杂,花费在构建上的时间就越长,开发效率就越低。

通过分析构建过程,可以了解项目构建的时间都花在哪,以及项目存在哪些潜在的问题,找到构建瓶颈,解决问题,提升构建性能和开发幸福感。

所以,本文先从准确找到问题开始,介绍几个构建分析的工具:

  • Build Analyzer
  • Profile
  • Build Scan

2、Build Analyzer

Build Analyzer,是Android Studio提供的构建分析器,可以在build窗口中打开查看。

2.1、Overview

构建后首次打开,会展示本次构建的概览数据

包括构建总时长、建议等。

为确保数据准确有效,建议先执行clean。

2.2、Tasks

我们切到Tasks选项,可以看到每个Task的执行时间和占比,单击某个Task可以看到更多具体信息。

2.3、Warnings

切到Warnings选项可以查看警告,比如这里提示没有使用「配置缓存」。

除此之外,还会检查你有没有开启「增量构建」「增量注解」,是否有必要开启「android.enableJetifier=true」等。

2.4、Downloads

切到Downloads选项可以查看下载信息,有些下载很慢的话可以添加一下镜像啊,或者调整一下仓库地址顺序啊,还有就是动态版本每次都要下载是不是可以考虑优化一下啊等等,非常有帮助。

3、Profile

Profile是Gradle提供的构建检测工具,通过命令行执行--profile可以在本地生产一份HTML报告。

比如:

bash 复制代码
./gradlew assembleDebug --profile

输出:

bash 复制代码
➜  GradleX git:(master) ✗ ./gradlew assembleDebug --profile

BUILD SUCCESSFUL in 3s
34 actionable tasks: 34 executed

See the profiling report at: file:///Users/yechao/AndroidStudioProjects/GradleX/build/reports/profile/profile-2023-09-24-15-50-21.html

可以直接在控制台打开这个file链接,也可以在root > build > reports > profile文件夹中找到。

3.1、Summary

默认是概览界面,包括Total Build Time、Configuring Projects、Task Execution等基本信息。

3.2、Configuaration

Configuaration就是配置阶段耗时,包括All projects、app以及其它模块的配置时间。

3.3、Dependency Resolution

这个顾名思义,就是依赖解析耗时。

3.4、Artifact Transforms

Gradle在新版本报告中还加入了Transform耗时,比如做些产物转换啊啥的,我暂时没有这种操作,所以是0s。

3.5、Task Execution

这里就是各个Task的执行时长。

有同学看这里就觉得奇怪了,Total Build Time才3s呢,这个Task Execution怎么就4s了?

这是因为这里统计的是Task执行的总时长,实际编译过程中Task是并行在跑的,所以会出现大于总时长的情况。

4、Build Scan

Build Scan也是Gradle提供的构建分析工具,相比于Profile方式,Build Scan提供的信息更加丰富,且是在线报告,而且还可以用来排查编译错误。

使用非常简单,命令加上--scan即可:

bash 复制代码
./gradlew build --scan

如果你是首次构建,报告上传Gradle服务器需要同意相关条款,yes即可

perl 复制代码
Publishing a build scan to scans.gradle.com requires accepting the Gradle Terms of Service defined at https://gradle.com/terms-of-service. 
Do you accept these terms? [yes, no]       

执行完毕,会随机生成一个链接:

erlang 复制代码
Gradle Terms of Service accepted.

Publishing build scan...
https://gradle.com/s/bv5a4lsy47vni

用浏览器打开这个链接。

如果你是首次使用Build Scan,还需要输入邮箱激活一下。

然后在邮箱打开Gradle的邮件。

点击链接,即可查看我们的构建分析报告了。激活后就可以直接在控制台点开链接查看报告了。

链接贴这里,大家也可以查看。

4.1、Summary

这个概览信息就比Profile详细多了,其中包括你的Gradle版本、total build time、projects、构建配置的开关、编译的环境等等。

所谓信息越多,决策就越正确,对你分析构建也就越有帮助。

4.2、Performance

我们可以点击左边菜单查看更多的具体信息,比如查看性能Performance。

这里可以看到,Performance的二级菜单要比Profile更丰富一些,除了Build、Configuration、Dependency resolution、Task execution这四项外,还有Build Cache、Daemon、Network activity。

4.3、Task execution

编译的主要耗时是Task,所以我们先来看看Task execetion。

这里除了展示所有Task的执行时间之外,还展示了有多少个Task是命中缓存的,有多少个Task是增量编译的等等。

在下面,我们还可以点击某个具体的Task去看。

4.4、Timeline

在Timeline里我们可以看到所有Task执行的时间线。

点击具体的Task可以看到执行的具体信息,点击「Focus on task in timeline」可以看到该Task在整个时间线的具体位置。

4.5、switches

switches里面会展示一些Gradle配置的开关状态,可以很好的帮助你查漏补缺。

比如我这里Cache都没开,并行编译也没开,离线也没开,如果这些都开了,构建性能又会有大大的提升。

5、最后

本文依次介绍了Build Analyzer、Profile、Build Scan,通过这些构建分析工具,我们可以更好的去分析项目的构建过程,从而提升构建性能。

  • Build Analyzer:开发工具提供,不割裂,但是分析能力相对基础,不过一般也够用了,推荐;
  • Profile:本地分析报告,分析能力相对基础;
  • Build Scan:在线分析报告,分析能力较强,可以进行深入的分析,推荐;

其实Gradle还提供了Enterprice,比Build Scan的分析能力还要强,但是属于付费的,不是很符合现在降本增效的主题。

以上是Build Scan免费版和付费版的对比,大家感兴趣的话可以自行去官网了解。

写作不易,感谢支持~

6、GitHub

github.com/yechaoa/Gra...

7、相关文档


相关推荐
福兮说8 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
郑州光合科技余经理9 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
小呆呆66610 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
Dovis(誓平步青云)10 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
码艺-Alimjan11 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_11 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒11 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技12 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
yivifu12 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub
默_笙13 小时前
🛴 从散件到整机:DeepAgents 与 Agent 身上预留的那些"插槽"(前置介绍)
前端·javascript