iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >构建Gradle的示例分析
  • 651
分享到

构建Gradle的示例分析

2023-06-15 10:06:53 651人浏览 薄情痞子
摘要

小编给大家分享一下构建Gradle的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Gradle构建过程根据在上图中所示,Gradle 的构建过程主要分为三

小编给大家分享一下构建Gradle的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

Gradle构建过程

构建Gradle的示例分析

根据在上图中所示,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 都创建完成了"}

监听Gradle配置阶段时机

在 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执行阶段时机

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 构建执行结束的回调

gradle.buildFinished

当所有的任务执行完毕的回调

gradle.buildFinished {    BuildResult buildResult ->        println "构建完毕"}

计算 build 任务的执行时长

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 moduleproject(":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}"            }        }}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的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 构建Gradle的示例分析

本文链接: https://www.lsjlt.com/news/279694.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 构建Gradle的示例分析
    小编给大家分享一下构建Gradle的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Gradle构建过程根据在上图中所示,Gradle 的构建过程主要分为三...
    99+
    2023-06-15
  • Android Gradle插件3.0的示例分析
    这篇文章主要为大家展示了“Android Gradle插件3.0的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android Gradle插件3.0的示例分析”这篇文章吧。为了提升编译...
    99+
    2023-05-30
    android gradle
  • ASP.NET站点构建的示例分析
    本篇文章为大家展示了ASP.NET站点构建的示例分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。网站优化需要考虑的方面在用ASP.NET开发网站的时候,性能是永远需要考虑和关注的问题,性能不仅仅只...
    99+
    2023-06-17
  • 【Android Gradle 插件】Android Studio 工程 Gradle 构建流程 ② ( settings.gradle 构建脚本分析 | 根目录下 build.gradle 分析 )
    文章目录 一、settings.gradle 构建脚本分析1、Maven 远程仓库配置2、目录配置3、完整代码示例 二、根目录下 build.gradle 构建脚本分析 一、settings.gradle 构建脚本分...
    99+
    2023-08-16
    android android studio gradle settings.gradle build.gradle
  • hash join构建位图的示例分析
    这篇文章主要介绍了hash join构建位图的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 hash ...
    99+
    2024-04-02
  • Python数据结构创建的示例分析
    本篇文章为大家展示了Python数据结构创建的示例分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 列表list:变量赋值方式:shoplist = ['apple', '...
    99+
    2023-06-17
  • vite项目构建优化的示例分析
    这篇文章主要介绍了vite项目构建优化的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。vite项目构建优化路由动态导入 经过rollup的构建,动态导入的文件将会生成...
    99+
    2023-06-20
  • Android Studio 3.0 gradle提示版本太老的示例分析
    这篇文章主要介绍了Android Studio 3.0 gradle提示版本太老的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。很多朋友在用Android Studi...
    99+
    2023-05-30
    android studio
  • Angular2架构的示例分析
    这篇文章给大家分享的是有关Angular2架构的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。核心模块一个完整的Angular应用主要由六个重要部分组成:组件、模板、指令...
    99+
    2024-04-02
  • vue项目构建与实战的示例分析
    这篇文章将为大家详细讲解有关vue项目构建与实战的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。vue项目分类首先,在构建一个vue项目之前我们需要了解vue项目...
    99+
    2024-04-02
  • vue构建单页面应用的示例分析
    小编给大家分享一下vue构建单页面应用的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体如下步骤:1.使用vue-cli创建项目2.使用vue-router实现单页路由3.用vu...
    99+
    2024-04-02
  • Kubernetes架构的示例分析
    这篇文章主要介绍Kubernetes架构的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!首先,为什么要用Kubernetes 使用一个工具先要梳理下使用这个工具的目标,我们不是为了工具而用工具。Kuberne...
    99+
    2023-06-19
  • Java中Builder模式构建MAP/LIST的示例分析
    这篇文章主要为大家展示了“Java中Builder模式构建MAP/LIST的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java中Builder模式构建MAP/LIST的示例分析”这篇...
    99+
    2023-05-31
    builder模式 map list
  • webpack构建性能优化策略的示例分析
    小编给大家分享一下webpack构建性能优化策略的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!背景如今前端工程化的概念...
    99+
    2024-04-02
  • Webpack构建代码质量压缩的示例分析
    小编给大家分享一下Webpack构建代码质量压缩的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Webpack构建速度优化基本优化完毕,接下来考虑的就是:线上代码质量的优化,即如何...
    99+
    2024-04-02
  • 前端构建CSS预处理器的示例分析
    这篇文章主要介绍前端构建CSS预处理器的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量、混合(mi...
    99+
    2024-04-02
  • MySQL架构组件的示例分析
    这篇文章将为大家详细讲解有关MySQL架构组件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。总体架构一. 连接器  连接器主要负责跟客户端建立连接、权限验证和管...
    99+
    2024-04-02
  • Linux系统结构的示例分析
    这篇文章主要介绍Linux系统结构的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构...
    99+
    2023-06-15
  • Go语言结构的示例分析
    这篇文章主要为大家展示了“Go语言结构的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Go语言结构的示例分析”这篇文章吧。当前的调试部分可以使用 go run filename.go 来...
    99+
    2023-06-20
  • MySQL体系架构的示例分析
    这篇文章给大家分享的是有关MySQL体系架构的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。MySQL 体系架构MySQL 体系架构主要分为两部分:客户端和服务端客户端客...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作