Gradle原理流程分析

Posted Beason_H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gradle原理流程分析相关的知识,希望对你有一定的参考价值。

认识Gradle

​ 首先我们需要了解什么是Gradle,笔者第一次接触Gradle是在android开发中使用到的,刚开始会想当然认为Gradle是为Android量身定制的工具,其实不然。Gradle首先可以理解为一个项目构建工具,或者深入理解来说就是一种编程框架,与平台无关,与工程类型无关。

首先我们来梳理一下,我们如果要手动来完成执行一个Java程序或者打包一个android程序需要经历的步骤:

执行Java程序(代码以及写完)步骤:

  1. 下载第三方包
  2. 使用java工具将java文件编译成.class
  3. 生成.class可能需要生成文档
  4. 使用java工具将所有资源打包成一个jar

打包Android程序简要步骤:

  1. aapt2打包res资源文件
  2. aapt2建立索引
  3. 通过javac编译java成class文件
  4. 通过d8工具生成dex
  5. 通过aapt2合并关联res和dex
  6. 通过zipalign工具对齐处理
  7. 通过apksigner工具签名

​ 简单介绍就这些步骤,其中还有很多细节处理,比如多项目支持,差异化处理,缓存优化等等。这些如果手动处理基本上不可能,要让流程简单化,就需要对这些流程进行封装,这就是Gradle的作用了。帮助我们对各种应用程序构建执行流程化,减轻我们的工作量。

Gradle结构

Gradle单独来讲,就是一个单独的构建工具,不依赖于java\\android等。让我们走进gradle原始工程

  1. 准备Gradle

    gradle是一个单独的构建工具,可以单独执行。所以一般会手动单独下载或者AS自动下载到本地:

    gradle工具默认目录:

    Windows:C:\\Users\\xxxxxx\\.gradle\\wrapper\\dists\\gradle-6.7-all

    Mac:/Users/xxxxxx/.gradle/wrapper/dists/gradle-6.7-all

  2. 基本结构

    每一个Gradle项目基本结构

    文件作用
    gradlegradle-wrapper.jar是Gradle Wrapper的主体功能包
    gradle-wrapper.properties 自动生成的配置文件
    distributionBase 下载的Gradle压缩包解压后存储的主目录
    distributionPath 相对于distributionBase的解压后的Gradle压缩包的路径
    zipStoreBase 同 distributionBase ,只不过是存放zip压缩包
    zipStorePath 同 distributionPath ,只不过是存放zip压缩包
    distributionUrl gradle发行版压缩包的下载地址
    .gradle自动生成的一些记录,可以不用管它
    build.gradle文件包含项目构建所使用的脚本,是针对单个项目的具体配置
    setting.gradle是gradle项目的总体配置文件,一般会把子项目中通用的一些配置放在这个文件中
    gradlew.batwindows环境下gradle执行脚本
    gradlewLinux/mac环境下gradle执行脚本

Gradle构建流程

了解了Gradle的整体结构,下面我们来一起学习下Gradle的构建流程。

Gradle的构建流程分为三部分分别是:

  1. 初始化阶段

    扫描setting.gradle,解析整个工程中所有的Project,构建所有的Project对应的project对象

  2. 配置阶段

    加载所有参与本次构建项目下的build.gradle文件,解析所有project对象中的task,分析project之间依赖关系生成拓扑图TaskGraph

  3. 执行阶段

    这是Task真正被执行阶段,Gradle会根据依赖关系决定task执行流程,Task是Gradle中最小执行单元,我们所有的构建,编译,打包,debug都是执行了某一个(多个)Task

以上是gradle构建流程的基本三个步骤,也就是说无论执行哪个task,那怕是task没有内容,也会执行这三部。

Gradle生命周期监听

所有gradle中能操作的动作,有对应的类文件定义它,我们搜索可查看Gradle.java的文件可以查看到这些监听的事件。

各个阶段的回调监听如图:


本文旨在初始Gralde,Gradle的构建流程,以及如何监听它的生命周期

以上是关于Gradle原理流程分析的主要内容,如果未能解决你的问题,请参考以下文章

Android Gradle 插件Android Studio 工程 Gradle 构建流程 ② ( settings.gradle 构建脚本分析 | 根目录下 build.gradle 分析 )

Gradle 源码分析

Gradle 源码分析

Gradle 源码分析

Gradle 源码分析

Gradle 源码分析