在上一篇文章中 Gradle 之语言基础 Groovy 主要介绍了 Groovy 的基础语法(如果没有 Groovy 的基础,建议先看看上篇文章,如果可以动手敲一下里面的示例代码就更好不过了),也是为本篇文章打基础的。
本篇文章主要介绍 Gradle 在 Android 中的应用(Android DSL 和 Gradle DSL),也是通过一些示例来介绍和理解,主要分为以下一些内容,示例代码都在 GradleForAndroid
一. Gradle 构建生命周期
一个 Gradle 的构建通常有如下三个阶段
- 初始化:项目
Project
实例会在该阶段被创建。如果一个项目中包含有多个模块,并且每一个模块都有其对应的build.gradle
文件,就会为每一个模块都创建一个对应的Project
实例 - 配置:执行各个模块下的
build.gradle
脚本,为Project
实例创建和配置Task
,构造Task
任务依赖关系图以便在执行阶段按照依赖关系执行Task
- 执行:在这个阶段将会决定执行哪个
Task
,哪个Task
被执行取决于开始该次构建的参数配置和该 Gradle 文件的当前目录
在创建完成一个新的 Android 应用项目之后,一般情况下, .gradle 文件的目录结构如下所示:
GradleForAndroid
|---- build.gradle
|---- setting.gradle
\---- app
\---- build.gradle
其中,两个文件 build.gradle
和 setting.gradle
位于项目的根目录下,还有一个 build.gradle
位于 \app\
目录下。\build.gradle
是顶层构建文件,\app\build.gradle
是模块构建文件。
我们以上面这个新创建的项目来学习 Gradle 的构建生命周期
1.1 初始化
-
在初始化阶段,会创建一个
Setting
对象,对应着setting.gradle
文件,Setting
对象的一个主要作用就是声明哪些模块将会参与到构建中去,Setting 文档(Gradle API 5.0) -
在新建的项目中,
setting.gradle
文件一般会默认包含一行内容,如下所示include ':app'
上面这一行,其实是一行
groovy
代码的简写,对应的是Setting#include(String[] projectPaths)
方法,表示:app
模块将会参与到构建中去。
如果我们创建一个library
库,setting.gradle
将会变为如下所示,表示:app
和:library
两个模块将会参与到构建中include ':app', ':library'
-
setting.gradle
脚本文件可以中读取一些只可读的配置信息,这些配置信息的来源可以有如下三个:- 可以在本工程的
gradle.properties
文件中定义配置信息 - 也可以在系统的
gradle.properties
文件中定义配置信息,系统的gradle.properties
位于user's .gradle
目录下 - 还可以通过
-P
命令参数指定配置信息,比如./gradlew clean -P cmd='Hello from commandLine'
便在执行clean
task 的时候,指定了cmd='Hello from commandLine'
配置信息
- 可以在本工程的
-
上面讲到,一个
setting.gradle
文件对应着一个Setting
对象,Setting
对象包含的方法如下图所示</