
Android Gradle学习(八) 统计Task执行时长
发布日期:2021-05-14 01:33:57
浏览次数:16
分类:精选文章
本文共 4199 字,大约阅读时间需要 13 分钟。
如何使用Gradle跟踪和分析构建任务执行时间
在Android开发中,优化构建过程尤为重要。长时间的构建时间不仅影响开发效率,也会降低用户体验。本文将教你如何创建一个Gradle插件,用于跟踪和分析每个任务的执行时间。
准备工作
创建一个Gradle插件项目
通过Gradle脚手架创建一个默认的插件项目。默认配置下,项目结构如下:
project│└── src └── main │ └── java │ └── com └── youetaku └── plugin └── BuildTimeCostPlugin.java
安装Gradle插件开发工具
安装最新版本的Gradle插件开发工具。如果你使用的是IntelliJ IDEA,可以在设置中启用“允许修改源代码”以便到达类path。
插件开发步骤
1. 创建TaskExecutionListener
public class BuildTimeCostPlugin implements Plugin { @Override void apply(Project project) { project.getGradle().addListener(new TaskExecutionListener() { @Override void beforeExecute(Task task) { TaskExecTimeInfo timeInfo = new TaskExecTimeInfo(); timeInfo.start = System.currentTimeMillis(); timeInfo.path = task.getPath(); timeCostMap.put(task.getPath(), timeInfo); taskPathList.add(task.getPath()); } @Override void afterExecute(Task task, TaskState taskState) { TaskExecTimeInfo timeInfo = timeCostMap.get(task.getPath()); timeInfo.end = System.currentTimeMillis(); timeInfo.total = timeInfo.end - timeInfo.start; } }); // 绝 musí Monitoring-checkbox进行监听构建完成 project.getGradle().addBuildListener(new BuildListener() { @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) { // 第二部分,按配置输出时间过长的任务 if (timeCostExt.sorted) { Listlist = new ArrayList<>(); timeCostMap.forEach((path, timeInfo) -> list.add(timeInfo)); list.sort((o1, o2) -> o2.total - o1.total); list.forEach(timeInfo -> { if (timeInfo.total >= timeCostExt.threshold) { System.out.println(timeInfo.path + " [" + String.format("%,d", timeInfo.total) + "ms]"); } }); } else { taskPathList.forEach(path -> { TaskExecTimeInfo timeInfo = timeCostMap.get(path); if (timeInfo.total >= timeCostExt.threshold) { System.out.println(path + " [" + String.format("%,d", timeInfo.total) + "ms]"); } }); } } }); } @Override public boolean apply(Class type) { return false; } // 自定义的Extension类 public static class BuildTimeCostExtension { int threshold; boolean sorted; void threshold(int threshold) { this.threshold = threshold; } void sorted(boolean sorted) { this.sorted = sorted; } } // 类中的字段,可选属性 Map timeCostMap = new HashMap<>(); List taskPathList = new ArrayList<>(); // 伴随this的类 class TaskExecTimeInfo { Long total; String path; long start; long end; }}
2. 定义自定义Extension
public class BuildTimeCostExtension { int threshold = 100; boolean sorted = true; void threshold(int threshold) { this.threshold = threshold; } void sorted(boolean sorted) { this.sorted = sorted; }}
3. 在Gradle构造脚本中集成插件
apply plugin: 'BuildTimeCostPlugin'buildTimeCost { threshold = 100 sorted = true}
使用和测试
构建项目
在项目根目录下执行以下命令:
./gradlew assembleDebug
查看构建日志
打开Gradle的日志查看器(File>Settings>Build, Execution, Deployment>Build Output),分析每个任务的执行时间。
优化插件输出
根据需要调整BuildTimeCostExtension
中的threshold
和sorted
属性,查看输出结果是否符合预期。
总结
通过创建一个Gradle插件,你可以轻松跟踪和分析每个构建任务的执行时间。这不仅有助于识别性能瓶颈,还能帮助优化构建流程,提升开发效率。通过继续探索Gradle的更多功能,你可以开发出更加实用和功能丰富的构建工具。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月12日 22时12分59秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
影响拉线位移传感器精度的原因有哪些?
2019-03-12
无法初始化Winsock2.2处理
2019-03-12
Horizon Cloud之UAG访问异常
2019-03-12
vm无法打开电源
2019-03-12
vMotion 操作失败进度卡在14% ,报错: Operation Timed out
2019-03-12
vCenter日志相关
2019-03-12
重置UAG Application admin密码
2019-03-12
TA部署失败重置过程
2019-03-12
Horizon Daas租户管理平台扩展分配时报:内部错误
2019-03-12
vcenter访问报503错误处理
2019-03-12
项目计划甘特图绘制说明
2019-03-12
1004.串口收发数据集成bug
2019-03-12
09.QT应用程序启动外部exe文件
2019-03-12
1009. clion调试段错误
2019-03-12
C/C++:线性表之顺序表
2019-03-12
嵌入式系统试题库(CSU)
2019-03-12
图神经网络7日打卡营学习心得
2019-03-12
electronJS 开发linux App
2019-03-12
STM32F7 LWIP协议栈TCP速度测试
2019-03-12
Arm Mbed OS 更适合大学实训平台
2019-03-12