您好,登录后才能下订单哦!
小编给大家分享一下构建Gradle的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
根据在上图中所示,Gradle 的构建过程主要分为三个阶段:
初始化阶段
配置阶段
执行阶段
在这个初始化阶段中主要有两个时机需要关注:
setting.gradle 执行结束的监听
//1.setting.gradle 执行结束的监听 gradle.settingsEvaluated { println "settings.gradle 初始化执行结束" }
参与构建的Project对象创建完毕的监听
//2.参与构建的Project对象创建完毕的监听 gradle.projectsLoaded { Gradle gradle -> println "settings.gradle 所有在 settings 中 include 的 Project 都创建完成了" }
在 settings.gradle 中可以配置需要参与构建的 project ,并且在初始化阶段就已经创建好对应的 project 实例了。
Gradle 的配置阶段就是执行每一个 Project 对应的 build.gradle 的配置代码。
下面相关的API是关于配置的回调:
gradle.beforeProject
表示对每一个 project 在执行配置代码之前都会回调这个方法。
gradle.beforeProject { Project project -> println ">>>>>>>>gradle beforeProject " + project.name + " 配置开始前回调" }
project.beforeEvaluate
当前 project在执行配置代码之前的回调
通过 gradle.afterProject 和 project.afterEvaluate 是差不多一下的。
this.afterEvaluate { project -> println project.name + " 配置结束监听" }
gradle.projectsEvaluated
表示所有的 project 都执行完对应的 build.gradle 的配置代码,准备要去生成对应的 Task 依赖图。
gradle.projectsEvaluated { gradle -> println "所有的project都配置完毕了,准备生成Task依赖关系" }
gradle.taskGraph.whenReady
表示 "task 依赖关系已经生成"
gradle.taskGraph.whenReady { TaskExecutionGraph graph -> println "task 依赖关系已经生成" }
Gradle 在配置阶段中会执行每一个 project 的 build.gradle 的配置代码,并且最终生成每一个 Task 任务的依赖关系。下面到了执行阶段就会根据这个依赖关系去执行对应的 Task 任务。
gradle.taskGraph.beforeTask
每一个 Task 任务执行之前回调
gradle.taskGraph.beforeTask { Task task -> println "Project[${task.project.name}]--->Task[${task.name}] 在执行之前被回调" }
gradle.taskGraph.afterTask
每一个 task 执行之后被回调
gradle.taskGraph.afterTask { task, TaskState taskState -> //第二个参数表示 task 的状态,是可选的参数 println "Project[${task.project.name}]--->Task[${task.name}] 在执行完毕,taskState[upToDate:${taskState.upToDate},skipped:${taskState.skipped},executed:${taskState.executed},didWork:${taskState.didWork}]" }
gradle.buildFinished
当所有的任务执行完毕的回调
gradle.buildFinished { BuildResult buildResult -> println "构建完毕" }
在 Android 中 build 的执行是最为复杂,也是执行时间最久的一个 Task ,因为 build 这个任务依赖了很多其他的任务,第一个被依赖的任务是 preBuild ,因此我们希望在 preBuild 执行之前记录当前的时间戳taskStartTime,在 build 执行完毕之后记录当前的时间戳taskEndTime,然后计算两个时间戳的差值即是 build 任务的执行时长啦。
下面是具体的步骤:
通过 project(":app") 对 app module 单独配置。
通过 project.afterEvaluate 监听 project 配置完毕。
通过 getBuildTask 获取 preBuild 和 build 两个任务对象。
监听 preBuild.doFirst 得到开始执行的时间戳。
监听 build.doLast 得到执行完毕的时间戳。
最后得到两个时间戳的差值即是该任务的执行市场。
执行 build 任务。
//配置 app module project(":app") { Project project -> project.afterEvaluate { //获取build task 任务 Task buildTask = getBuildTask(project, ":app:build") //获取 preBuild 任务 Task preBuildTask = getBuildTask(project, ":app:preBuild") def taskStartTime = 0 def taskEndTime = 0 //在preBuild task 中追加一个监听获取在preBuild执行之前的时间戳的 action preBuildTask.doFirst { taskStartTime = System.currentTimeMillis() } //在build task 中追加一个监听获取执行完毕的时间戳的 action buildTask.doLast { taskEndTime = System.currentTimeMillis() println "build task 执行时间:${taskEndTime - taskStartTime}" } } } /** * 获取该project对应的build任务 * @param project * @return */ Task getBuildTask(Project project, String taskPath) { //获取该project管理task的容器 TaskContainer taskContainer = project.getTasks() //拿到build的Task对象 Task buildTask = taskContainer.getByPath(taskPath) return buildTask }
执行build任务
./gradlew build
以上是“构建Gradle的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。