Gradle原理流程分析
Posted Beason_H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gradle原理流程分析相关的知识,希望对你有一定的参考价值。
认识Gradle
首先我们需要了解什么是Gradle,笔者第一次接触Gradle是在android开发中使用到的,刚开始会想当然认为Gradle是为Android量身定制的工具,其实不然。Gradle首先可以理解为一个项目构建工具,或者深入理解来说就是一种编程框架,与平台无关,与工程类型无关。
首先我们来梳理一下,我们如果要手动来完成执行一个Java程序或者打包一个android程序需要经历的步骤:
执行Java程序(代码以及写完)步骤:
- 下载第三方包
- 使用java工具将java文件编译成.class
- 生成.class可能需要生成文档
- 使用java工具将所有资源打包成一个jar
打包Android程序简要步骤:
- aapt2打包res资源文件
- aapt2建立索引
- 通过javac编译java成class文件
- 通过d8工具生成dex
- 通过aapt2合并关联res和dex
- 通过zipalign工具对齐处理
- 通过apksigner工具签名
简单介绍就这些步骤,其中还有很多细节处理,比如多项目支持,差异化处理,缓存优化等等。这些如果手动处理基本上不可能,要让流程简单化,就需要对这些流程进行封装,这就是Gradle的作用了。帮助我们对各种应用程序构建执行流程化,减轻我们的工作量。
Gradle结构
Gradle单独来讲,就是一个单独的构建工具,不依赖于java\\android等。让我们走进gradle原始工程
-
准备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
-
基本结构
每一个Gradle项目基本结构
文件 作用 gradle gradle-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.bat windows环境下gradle执行脚本 gradlew Linux/mac环境下gradle执行脚本
Gradle构建流程
了解了Gradle的整体结构,下面我们来一起学习下Gradle的构建流程。
Gradle的构建流程分为三部分分别是:
-
初始化阶段
扫描setting.gradle,解析整个工程中所有的Project,构建所有的Project对应的project对象
-
配置阶段
加载所有参与本次构建项目下的build.gradle文件,解析所有project对象中的task,分析project之间依赖关系生成拓扑图TaskGraph
-
执行阶段
这是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 分析 )