Gradle 框架
Gradle是一个开源的构建自动化工具,专注于灵活性和性能。Gradle构建脚本是使用Groovy或Kotlin DSL编写的。
Gradle的特性
- 高度可定制 :Gradle提供在一种最基本的构建模型上定制和扩展的能力。
- 快 :Gradle通过重用以前构建输出、仅重新构建更改的内容,构建任务并行执行,来达到快速构建。
- 功能强大:Gradle是Android的官方构建工具,支持许多流行的语言和技术。
以上是Gradle官网的介绍
Gradle 的核心组件
先来了解一下Gradle中的基本概念:
- Gradle 的脚本是配置脚本。换句话说,当脚本运行时,会实例化(配置)一个对应类型的对象。比如:当一个build.gradle的脚本运行时,会实例化一个Project类型的变量,在Gradle中称为委托对象,下面列出各种脚本对应的委托对象
脚本 | 委托对象 |
---|---|
Build script | Project |
Init script | Gradle |
Settings script | Settings |
委托对象中的属性和方法可以在脚本中使用
- 每一个脚本委托对象实现接口Script ,这个接口中定义了大量的属性和方法,你可以在脚本中使用它们。
构建脚本的组成
一个构建脚本由0个或者多个声明和脚本块组成,声明可以是方法调用,属性赋值,本地变量定义。一个脚本块就是一个以闭包为参数的方法调用。
核心组件
Gradle:
代表一个Gradle的调用,也就是说使用gradle运行一个task会先实例化一个Gradle对象,你可以在脚本中通过Project.getGradle().方法或者gradle属性来获取这个对象实例
具体属性和方法查询:Gradle
Setting:
当你构建有多个模块的项目时候,将要用到Setting,你可以在里面声明包含哪些project。对应脚本中的settings.gradle 文件;当gradle assembles 一个项目之前,首先执行settings 并创建Settings 实例。
具体属性和方法查询:Settings
Project:
Project的实例对应一个build.gradle 脚本,你可以在这里编写你的代码
具体属性和方法查询:Project
Task(Action,Input,Output):
一个Task代表一个原子性的编译工作内容,比如编译classes或者生成javadoc。一个Project包含多个task
具体属性和方法查询:Task
Gradle 的执行流程,生命周期
gradle构建项目的生命周期
- 为构建创建 Settings实例
- 如果settings.gradle脚本存在,评估settings.gradle脚本并配置Settings对象的属性和方法
- 使用Settings 创建Project实例的层级关系
- 最后按照宽度优先顺序,评估每一个build.gradle 文件对应的Project对象,父project 在子project之前评估,评估顺序可以自定义 ,Project.evaluationDependsOnChildren() 或者添加一个显示的依赖Project.evaluationDependsOn(java.lang.String).
note:上面说的评估就是把脚本中的内容一行行的执行和对应的委托对象映射起来
执行一个task的流程
执行task的命令
gradlew taskname
在需要的地方输出log,就可以知道流程(哎呀,我好懒)