在Gradle 插件中统计并打印 Task 任务耗时 您所在的位置:网站首页 gradle插件获取task 在Gradle 插件中统计并打印 Task 任务耗时

在Gradle 插件中统计并打印 Task 任务耗时

2024-06-10 01:00| 来源: 网络整理| 查看: 265

在Gradle 插件中统计并打印 Task 任务耗时

我们在使用 Gradle 构建任务时,有时想统计每个任务的耗时情况,以此发现每个任务的运行时间,以及是否存在可优化空间。

使用 Listener 进行监听

Gradle 提供了很多构建生命周期钩子函数。

1. 我们可以用 TaskExecutionListener 来监听整个构建过程中 task 的执行: public interface TaskExecutionListener { void beforeExecute(Task task); void afterExecute(Task task, TaskState taskState); }

我们可以在每个 task 执行前先收集信息,记录该 task 执行的开始时间等,在 task 执行完成后,记录其执行结束时间,这样就能统计出该 task 的执行时长。

2. 使用 BuildListener 来监听整个构建是否完成,在构建完成后,输出所有执行过的 task 信息,以及每个 task 的执行时长: public interface BuildListener { void buildStarted(Gradle gradle); void settingsEvaluated(Settings settings); void projectsLoaded(Gradle gradle); void projectsEvaluated(Gradle gradle); void buildFinished(BuildResult buildResult); }

在 buildFinished 方法中,监听构建完成以及成功与否,并打印我们采集的耗时信息。

代码实例

BuildTimeListener 是我自定义的一个监听任务耗时的工具类:

class BuildTimeListener implements TaskExecutionListener, BuildListener { //用来记录 task 的执行时长信息 Map taskTimeMap = new HashMap() @Override void buildStarted(Gradle gradle) { } @Override void settingsEvaluated(Settings settings) { } @Override void projectsLoaded(Gradle gradle) { } @Override void projectsEvaluated(Gradle gradle) { } @Override void buildFinished(BuildResult buildResult) { println "-----------------GouAPM----------------------" println "---------------------------------------" println "build finished, now println all task execution time:" taskTimeMap.each{ k, v -> println "${k}:[${v.total}ms]" } println "---------------------------------------" println "---------------------------------------" } @Override void beforeExecute(Task task) { //task开始执行之前搜集task的信息 TaskTimeInfo timeInfo = new TaskTimeInfo() timeInfo.start = System.currentTimeMillis() timeInfo.path = task.getPath() taskTimeMap.put(task.getPath(), timeInfo) } @Override void afterExecute(Task task, TaskState taskState) { //task执行完之后,记录结束时的时间 TaskTimeInfo timeInfo = taskTimeMap.get(task.getPath()) timeInfo.end = System.currentTimeMillis() //计算该 task 的执行时长 timeInfo.total = timeInfo.end - timeInfo.start } class TaskTimeInfo { //task执行总时长 long total String path long start long end } }

我们在自定义插件中进行注册:

class MyPlugin implements Plugin{ private Project mProject; @Override void apply(Project project) { mProject = project; //注册监听,以统计任务的耗时 project.gradle.addListener(new BuildTimeListener()) } }

**PS:更多性能优化相关文章,请查看 --> 《Android 性能优化》 **PS:更多性能优化相关文章,请查看 --> 《Android 性能优化》 **PS:更多性能优化相关文章,请查看 --> 《Android 性能优化》



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有