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

news2024/11/26 12:29:24

1、前言

构建性能对于生产力至关重要。
随着项目越来越复杂,花费在构建上的时间就越长,开发效率就越低。

通过分析构建过程,可以了解项目构建的时间都花在哪,以及项目存在哪些潜在的问题,找到构建瓶颈,解决问题,提升构建性能和开发幸福感。
所以,本文先从准确找到问题开始,介绍几个构建分析的工具:

  • Build Analyzer
  • Profile
  • Build Scan

2、Build Analyzer

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

2.1、Overview

构建后首次打开,会展示本次构建的概览数据
build analyzer.png
包括构建总时长、建议等。

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

2.2、Tasks

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

2.3、Warnings

warnings.png
切到Warnings选项可以查看警告,比如这里提示没有使用「配置缓存」。
除此之外,还会检查你有没有开启「增量构建」「增量注解」,是否有必要开启「android.enableJetifier=true」等。

2.4、Downloads

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

3、Profile

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

./gradlew assembleDebug --profile

输出:

➜  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等基本信息。
summary.png

3.2、Configuaration

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

3.3、Dependency Resolution

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

3.4、Artifact Transforms

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

3.5、Task Execution

这里就是各个Task的执行时长。
Task Execution.png
有同学看这里就觉得奇怪了,Total Build Time才3s呢,这个Task Execution怎么就4s了?
这是因为这里统计的是Task执行的总时长,实际编译过程中Task是并行在跑的,所以会出现大于总时长的情况。

4、Build Scan

Build Scan也是Gradle提供的构建分析工具,相比于Profile方式,Build Scan提供的信息更加丰富,且是在线报告,而且还可以用来排查编译错误。
使用非常简单,命令加上--scan即可:

./gradlew build --scan

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

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]       

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

Gradle Terms of Service accepted.

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

用浏览器打开这个链接。

如果你是首次使用Build Scan,还需要输入邮箱激活一下。
邮箱验证.png
然后在邮箱打开Gradle的邮件。
邮箱.png
点击链接,即可查看我们的构建分析报告了。激活后就可以直接在控制台点开链接查看报告了。
链接贴这里,大家也可以查看。

4.1、Summary

scan-summary.png
这个概览信息就比Profile详细多了,其中包括你的Gradle版本、total build time、projects、构建配置的开关、编译的环境等等。
所谓信息越多,决策就越正确,对你分析构建也就越有帮助。

4.2、Performance

我们可以点击左边菜单查看更多的具体信息,比如查看性能Performance。
performance.png
这里可以看到,Performance的二级菜单要比Profile更丰富一些,除了Build、Configuration、Dependency resolution、Task execution这四项外,还有Build Cache、Daemon、Network activity。

4.3、Task execution

编译的主要耗时是Task,所以我们先来看看Task execetion。
scan-task.png
这里除了展示所有Task的执行时间之外,还展示了有多少个Task是命中缓存的,有多少个Task是增量编译的等等。
在下面,我们还可以点击某个具体的Task去看。

4.4、Timeline

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

4.5、switches

switches.png
switches里面会展示一些Gradle配置的开关状态,可以很好的帮助你查漏补缺。
比如我这里Cache都没开,并行编译也没开,离线也没开,如果这些都开了,构建性能又会有大大的提升。

5、最后

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

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

其实Gradle还提供了Enterprice,比Build Scan的分析能力还要强,但是属于付费的,不是很符合现在降本增效的主题。
compare.png
以上是Build Scan免费版和付费版的对比,大家感兴趣的话可以自行去官网了解。

写作不易,感谢支持~

6、GitHub

https://github.com/yechaoa/GradleX

7、相关文档

  • Profile your build
  • Inspecting Gradle Builds
  • Build Analyzer
  • https://scans.gradle.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1070680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt之实现圆形进度条

在Qt自带的控件中,只有垂直进度条、水平进度条两种。 在平时做页面开发时,有些时候会用到圆形进度条,比如说:下载某个文件的下载进度。 展示效果,如下图所示: 实现这个功能主要由以下几个重点&#xff1a…

在公众号上怎么创建微信付费课程功能呢

微信付费课程功能是一项比较受欢迎的在线教育服务,可以帮助教育机构或个人更好地管理和销售课程资源,提高知识分享和变现的效率。下面将介绍如何创建微信付费课程功能。 一、了解微信付费课程功能 在创建微信付费课程功能之前,需要先了解微信…

【自学笔记】网络安全——黑客技术

想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客!!! 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队…

【Java 进阶篇】HTML表格标签详解

HTML(Hypertext Markup Language)表格标签是在网页中用于创建表格的重要工具。表格是一种在网页上以行和列的方式组织和显示数据的有效方式。在本文中,我们将详细介绍HTML表格标签,包括如何创建表格、定义表头、单元格合并等内容。…

Flask实现注册登录模块

🙌秋名山码民的主页 😂oi退役选手,Java、大数据、单片机、IoT均有所涉猎,热爱技术,技术无罪 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 获取源码,添加WX 目录 前言1.…

通过代码优雅地编写图表——Mermaid语法

通过代码优雅地编写图表——Mermaid语法 使用代码,在你的Typora中优雅地编写图表! 先看一个示例: gantt dateFormat YYYY-MM-DD title Adding GANTT diagram to mermaid excludes weekdays 2023-01-10section A section Completed task …

快速了解SpringCloud Sleuth --链路追踪 + Zipkin--数据搜集/存储/可视化

😀前言 本篇博文是关于SpringCloud Sleuth --链路追踪 Zipkin–数据搜集/存储/可视化的基本介绍和使用,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文…

常见源协议介绍

开源协议(Open Source License)是一种法律文档,用于规定如何使用、修改和分发开源软件和其他开源项目的规则和条件。这些协议允许创作者或组织将其创造的代码或作品以开放源代码的形式共享给他人,以促进协作、创新和知识共享。常见…

HttpClient实现爬虫开发

网络爬虫是一种高效获取网络信息的方式,而HttpClient是一个强大而灵活的Java库,提供了方便的API和丰富的功能,使其成为开发高效且灵活的网络爬虫的理想选择。本文将分享如何利用HttpClient库进行网络爬虫开发,帮助您更好地理解并实…

NSA 和 CISA 联合揭露当下十大网络安全错误配置

10月5日,美国国家安全局 (NSA) 和网络安全与基础设施安全局 (CISA) 公布了十大目前最常见的网络安全错误配置,这些错误由红蓝团队在大型组织网络中发现。 根据发布的联合报告,团队评估了国防部 (DoD)、联邦民事行政部门 (FCEB)、州和地方政府…

解决程序员百分百问题pip终极杀手

文章目录 pip中国版镜像源永久版中国镜像源pip添加多个中国版镜像源无敌版pip中的小细节 pip中国版镜像源 Python中使用pip安装包,常用的国内镜像有: 例如: Python中使用pip安装包,常用的国内镜像有:清华大学镜像&am…

Mac 点击桌面 出现黑边框 解决

1、桌面黑框效果 2、解决:设置为 仅在台前调度中

电脑散热——液金散热

目录 1.简介 2.传统硅脂与液金导热区别 3.特点 4.优点 5.为什么液金技术名声不太好 6.使用方法 1.简介 凡是对于电脑基础硬件有所了解的人,都知道硅脂是如今高性能电脑设备中必不可少的东西。芯片表面和散热器接触面,虽然肉眼看上去是非常光滑的金属…

vue实现拖拽排序

在业务中列表拖拽排序是比较常见的需求,常见的JS拖拽库有Sortable.js,Vue.Draggable等,大多数同学遇到这种需求也是更多的求助于这些JS库,其实,使用HTML原生的拖放事件来实现拖拽排序并不复杂,结合Vue的tra…

【运维笔记】Docker 安装Kibana-7.4.0(在线Docker版)

一、准备工作: Centos 7.5 安装 Docker-24.0.6 详细步骤(避坑版): https://blog.csdn.net/seesun2012/article/details/133674191注意1:本文的命令使用的是 root 用户登录执行,不是 root 的话所有命令前面…

山西电力市场日前价格预测【2023-10-09】

日前价格预测 预测说明: 如上图所示,预测明日(2023-10-09)山西电力市场全天平均日前电价为575.84元/MWh。其中,最高日前电价为1500.00元/MWh,预计出现在17: 30-20: 00。最低日前电价为218.27元/MWh&#x…

go的面向对象学习

文章目录 面向对象编程(上)1.问题与解决思路2.结构体1》Golang语言面向对象编程说明2》结构体与结构体变量(实例/对象)的关系的示意图3》入门案例(using struct to solve the problem of cat growing) 3.结构体的具体应用4.创建结构体变量和访问结构体字段5.struct类型的内存分…

Snowflake:一家由数据驱动的生成式人工智能公司

来源:猛兽财经 作者:猛兽财经 总结: (1)从长远来看,生成式人工智能只会进一步增加数据的重要性。 (2)尽管宏观环境面临挑战,但Snowflake(SNOW)仍然保持着强劲的增长率。 …

Map,Set和哈希表的使用

目录 两种模型 Map的使用 Map接口方法的使用 注意事项 Set的使用 哈希表 冲突 如何避免冲突 在我们日常生活中,会进行一些查找操作,比如根据姓名查询考试成绩,根据姓名查询联系方式等在查找是进行一些插入和删除操作,即动态查找. 而Map和Set是一种适合动态查找的集合容…

springboot整合thymeleaf模板引擎

1.什么是thyeleaf模板引擎 Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。 是新一代 Java 模板引擎,它支持 HTML 原型,其文件后缀为“.html”,因此它可以直接被浏览器打开,此时浏览器会忽略未定义的 Thymeleaf 标签…