持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情
Gradle 查询命令
查看主要任务
./gradlew tasks
查看所有任务,包括缓存任务等等
./gradlew tasks --all
Gradle 执行命令
对某个module [moduleName] 的某个任务[TaskName] 运行
./gradlew :moduleName:taskName
Build Scan
Build Scan 是官方推出的用于诊断应用构建过程的性能检测工具,它能分析出导致应用构建速度慢的一些问题。在项目下使用如下命令即可开启 Build Scan 诊断:
./gradlew build --scan
如果你使用的是 Mac,使用上述命令时出现
zsh: permission denied: ./gradlew
可以加入下面的命给 gradlew 分配执行权限:
chmod +x gradlew
操作步骤
- 构建完成后控制台会让上传到BuildScan中
- 第一次访问这个页面会让你绑定邮箱,邮箱中确认即可
- 再次刷新那个页面即可看到构建数据:
这里给出链接scans.gradle.com/s/zzmuiol6h…
- 点击Performance即可看到应用的构建性能分析页面
在 Build 界面中,共有三个子项目,即 Total build time、Total garbage collection time、Peak heap memory usage,Total build time 里面的配置项前面我们已经分析过了,这里我们看看其余两项的含义,如下所示:
- Total garbage collection time:总的垃圾回收时间。
- Peak heap memory usage:最大堆内存使用。(之前是用的和老年代年轻代的垃圾回收期构建的会有S1,S2和OLD区的内存使用,现在是使用G1垃圾回收期因此只有一项)
由于我们的目的是关注项目的 build 时间,所以,我们直接关注到 Task execution 这一项。如下图所示:
NotCacheable是用来35%的构建缓存来加快编译速度,点击该项即跳转到Timeline中。
如果想要查看具体某一个Task的详情,点击下面的task也会跳转到TimeLine中
比如:glsurfacedemo:mergeDexRelease这个Task的详情页面是这样的:
上方也可以看到类似火焰图的分析工具(点击下面会翻滚到具体的某个Task )
同样点击任务详情页面的Foucus on Timeline也会定位到上面
五、总结
Gradle 每次构建的运行时间会随着项目编译次数越来少,因此为了准确评估 Gradle 构建提速的优化效果,我们可以在优化前后分别执行以下命令进行对比分析,如下所示:
gradlew --profile --recompile-scripts --offline --rerun-tasks assembleDebug
参数含义如下:
-
profile:开启性能检测。
-
recompile-scripts:不使用缓存,直接重新编译脚本。
-
offline:启用离线编译模式。
-
return-task:运行所有 gradle task 并忽略所有优化。
此外,Facebook 的 Buck 以及 Google 的 Bazel 都是优秀的编译工具,那么他们为什么没有使用开源的构建工具呢,主要有如下 三点原因: