小工具知识网

当前位置: 首页 > 行业知识 > Android Gradle开发与应用 (四) : Gradle构建与生命周期

行业知识

Android Gradle开发与应用 (四) : Gradle构建与生命周期

2026-11-01 22:46:57 来源:互联网转载

1. 前言

前���篇文章,我们对Gradle中的基本知识,包括Gradle项目结构、Gradle Wrapper、GradleUserHome、Groovy基础语法、Groovy语法概念、Groovy闭包等知识点,这篇文章我们接着来介绍Gradle构建过程中的知识点。

2. Project : Gradle中构建过程的基本单位

在Gradle构建工具中,Project是一个核心概念,它代表了一个独立的构建单元,对应到项目结构中的一个模块或者子模块(每个build.gradle文件代表一个Project)。

在Gradle的构建模型中,一个Project可以包含多个子Project,形成一个树状结构。根Project用于统筹管理所有的子Project,而每个子Project都对应一个输出,例如APK文件、aar文件或jar文件等。

一个build(构建过程)由一个或多个project组成。每个project可以有多个task。

3. Task : Gradle中最小的构建单元

Task字面翻译就是任务的意思,是Gradle中最小的构建单元,每个Task代表构建过程中的一项具体工作或操作,比如编译Java源代码、打包JAR文件、运行测试、生成文档等,每一个Task都属于一个Project。

你可以将Gradle构建过程想象成一系列相互依赖的任务集合,这些任务按照特定的顺序和条件执行,共同完成构建流程。

在Gradle脚本(通常是build.gradle或settings.gradle.kts等文件)中,通过task关键字或者tasks.create()方法来定义一个Task。定义时可以为任务指定名称、组(group)、描述(description)以及闭包(closure)或动作(action),闭包内包含任务实际执行的操作逻辑。

// 定义一个简单的Task并设置其组和描述task helloTask (group: 'example', description: 'Prints a hello message') {    doLast {        println 'Hello from Gradle Task!'    }}

在build.gradle中,一切无主的方法,都回去Project上查找。

如果你好奇task这个方法存在于哪里的话,点击task,会直接跳转到Project.class的源码去。

你会发现,所谓的这么一个task,定义的API,本质上就是Project的一个方法而已。

gradle中一个很重要的feature是,gradle中的task是活的,而不是***的。

task可以在配置阶段动态创建。

4. Lifecycle : Gradle的生命周期

4.1 任务图

Gradle 会在执行任何任务之前构建任务图。

在构建中的所有项目中,任务形成有向无环图 (DAG)。

4.2 构建阶段

Gradle 构建工具的生命周期可以细分为三个主要阶段:

  • 初始化 (Initialization)

    • 检测settings.gradle(.kts)文件是否存在
    • 根据settings.gradle(.kts)文件创建Settings对象 (Settings实例和settings .gradle(.kts)文件相对应)
    • 根据Settings对象确定哪些子项目将参与构建过程
    • 为每个项目创建对应的 Project 实例 (build.gradle(.kts)和Project相对应),并建立整个多项目构建的结构
    • 配置 (Configuration)

      • 进入配置阶段后,Gradle会根据每个Project加载其目录下对应的build.gradle(.kts)
      • Gradle 会加载每个项目中的 build.gradle 或 build.gradle.kts 文件,根据其中的脚本定义来配置各个项目。
      • 在此阶段,Gradle 解析所有任务、依赖关系以及自定义插件等设置,并创建相应的Task对象。
      • 用户可以通过扩展点如plugins、dependencies、tasks块来自定义构建行为。
      • 执行 (Execution)

        • Gradle 按照任务间的依赖关系来调度执行任务,确保前置任务成功完成后才会执行后续依赖于它的任务。
        • 执行阶段包括编译源代码、打包资源、运行测试、生成工件(如JAR、WAR文件)等操作。
        • 任务的执行可以并行进行。

          Gradle 的强大之处在于它允许开发者在上述每个阶段插入定制的行为,例如通过添加钩子函数(如beforeSettings、projectsEvaluated等)来扩展其功能。此外,在执行阶段,Gradle 使用增量构建技术来提高构建效率,仅处理自上次构建以来发生变化的部分。

          在Gradle中,创建一个Settings实例是构建生命周期的第一步。Settings实例负责确定哪些项目应该包含在构建中,并为每个项目创建一个Project实例。这通常是通过解析settings.gradle或settings.gradle.kts文件来完成的,这些文件位于项目的根目录下。

          5. Hook : Gradle中的钩子函数

          Gradle中的Hook函数(也称为生命周期回调)允许你在构建生命周期的不同阶段插入自定义逻辑。这些Hook函数允许你扩展和定制Gradle的行为,以满足特定的构建需求。以下是一些Gradle中常用的Hook函数:

          • 构建初始阶段(Initialization)
            • settingsEvaluated : 完成项目的配置阶段之后调用 (只能定义在 seting.gradle 或 init.gradle 脚本中)
            • projectsLoaded : 所有项目加载之后调用 (只能定义在 setting.gradle 或 init.gradle 脚本中)
            • 配置阶段(Configuration)
              • beforeProject : 每个项目完成配置之前调用 (只能定义在 setting.gradle 或 init.gradle 脚本中)
              • afterProject : 每个项目完成配置之后调用
              • projectEvaluated : 所有项目全部完成配置之后调用
              • afterEvaluate : 整个配置阶段完成后调用
              • taskGraph.whenReady : 全部任务图已经构建完成可以就绪后调用
              • 执行阶段(Execution)
                • taskGraph.beforeTask : 执行每一个任务之前调用
                • taskGraph.afterTask : 每一个任务执行完成之后调用
                • buildFinished : 整个构建全部结束后调用

                  6. Gradle系列文章

                  Android Gradle 开发与应用 (一) : Gradle基础-CSDN博客

                  Android Gradle开发与应用 (二) : Groovy基础语法-CSDN博客

                  Android Gradle开发与应用 (三) : Groovy语法概念与闭包-CSDN博客

                  Android Gradle开发与应用 (四) : Gradle构建与生命周期-CSDN博客

                  基于Gradle 8.2,创建Gradle插件-CSDN博客

                  Android Gradle插件开发_实现自动复制文件插件

上一篇:揭秘!foobar轻松开启音效的实用教程!

下一篇:特斯拉服务器代理怎么开?