buildTrace.gradle 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import java.text.SimpleDateFormat
  2. /**
  3. * 监控构建耗时
  4. *
  5. * 记录构建过程中的每个任务的耗时,并写入文件中 .build_history/buildTimeLog_yy_MM_dd_HH_mm_ss.log中
  6. *
  7. * 使用时将文件放在app目录下,然后在app/build.gradle中添加引用:
  8. * apply from: "./buildTrace.gradle"
  9. */
  10. class BuildTimeListener implements TaskExecutionListener, BuildListener {
  11. private final String BUILD_LOG_FILE_DIR = ".build_history"
  12. private final String BUILD_LOG_FILE_PATH = "buildTimeLog"
  13. private long taskStartTime;
  14. private long buildStartTime;
  15. private int taskCounts = 0;
  16. private StringBuilder sb = new StringBuilder()
  17. private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
  18. private SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss")
  19. BuildTimeListener() {
  20. buildStartTime = System.currentTimeMillis()
  21. //添加一些版本信息
  22. // sb.append("codeTag:").append(ProjectConfig.codeTag).append("\n")
  23. // sb.append("branch:").append(ProjectConfig.branch).append("\n")
  24. // sb.append("versionName:").append(ProjectConfig.versionName).append("\n")
  25. // sb.append("versionCode:").append(ProjectConfig.versionCode).append("\n")
  26. sb.append("构建时间:" + sdf.format(new Date()) + "\n")
  27. sb.append("开始构建----------------------\n")
  28. }
  29. @Override
  30. void buildStarted(Gradle gradle) {
  31. }
  32. @Override
  33. void settingsEvaluated(Settings settings) {
  34. }
  35. @Override
  36. void projectsLoaded(Gradle gradle) {
  37. }
  38. @Override
  39. void projectsEvaluated(Gradle gradle) {
  40. }
  41. /**
  42. * 构建完成回调
  43. * @param result The result of the build. Never null.
  44. */
  45. @Override
  46. void buildFinished(BuildResult result) {
  47. if(taskCounts<5) return
  48. long buildCost = System.currentTimeMillis() - buildStartTime
  49. sb.append("构建结束----------------------\n")
  50. sb.append("构建总耗时:" + buildCost + "ms")
  51. //输出到文件
  52. String text = sb.toString()
  53. writeToFile(BUILD_LOG_FILE_PATH, text)
  54. }
  55. /**
  56. * 任务执行开始
  57. * @param task The task about to be executed. Never null.
  58. */
  59. @Override
  60. void beforeExecute(Task task) {
  61. taskStartTime = System.currentTimeMillis();
  62. }
  63. /**
  64. * 任务执行结束
  65. * @param task The task which was executed. Never null.
  66. * @param state The task state. If the task failed with an exception, the exception is available in this
  67. */
  68. @Override
  69. void afterExecute(Task task, TaskState state) {
  70. long cost = System.currentTimeMillis() - taskStartTime;
  71. System.out.println("任务:" + task.name + "," + task.path + ",耗时:" + cost);
  72. sb.append("[" + task.path + "]:" + cost + "ms\n")
  73. taskCounts++
  74. }
  75. private void writeToFile(String fname, String text) {
  76. File dir = new File(BUILD_LOG_FILE_DIR)
  77. if (!dir.exists()) {
  78. dir.mkdir()
  79. }
  80. File file = new File(BUILD_LOG_FILE_DIR + File.separator + fname + "_" + sdf2.format(new Date()) + ".log")
  81. file.write(text, true)
  82. }
  83. }
  84. gradle.addListener new BuildTimeListener()