Gradle 笔记 - Gradle 基础
Gradle 笔记 - Gradle 基础
《Gradle for Android 中文版》笔记
理解 Gradle 基础
Gradle 构建的脚本–build.gradle
Gradle 有约定优于配置的原则,即为设置和属性提供默认值。
基于 Groovy 的领域专用语言(DSL)。
Groovy 是一种基于 Java 虚拟机的动态语言。
想创建自己的任务和插件,那么对 Groovy 有更深层次的理解就显得尤为重要。
项目和任务
Gradle 中,最重要的两个概念是项目和任务。
- 每一次构建都包括至少一个项目,每一个项目有包括一个或多个任务。
- 每个build.gradle 文件都代表一个项目。
- 任务定义在构建脚本里。
当初始化构建过程时,Gradle 会基于 build 文件组装项目和任务对象。
一个任务对象包含一系列动作对象,这些动作对象之后会按顺序执行。
一个单独的动作对象就是一个待执行的代码块,它和 Java 中的方法类似。
构建生命周期
为了简化构建过程,构建工具会新建一个动态的模型流(叫做 Directed Acyclic Graph(DAG)),所有任务都会被一个接一个地执行,不循环和重复执行。
在构建的配置阶段会生成依赖关系图,那些没有依赖的任务通常会被优先执行。
Gradle 构建通常有三个阶段:
- 初始化:创建项目实例,一个项目如有多个模块,每个模块都有 build.gradle 文件,那么创建多个项目实例。
- 配置:构建脚本会被执行,并为每个项目实例创建和配置任务。
- 执行:Gradle 将决定哪个任务会被执行。
构建配置文件
整个项目的 build.gradle 文件:
buidscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build.gradle:3.5.0'
}
}
JCenter 是一个预配置的 Marven 仓库,放在 repositories 代码块中代表被配置为整个构建过程的依赖仓库。
Android 应用插件:
apply plugin: 'com.android.application'
每一个安卓项目都应该申请该插件,通常在 app 模块的 build.gradle 文件中。
用于扩展 Gradle 构建脚本的能力。
在项目中应用一个插件,项目就可以使用该插件预定义的一些属性和任务。
Android 依赖库插件:
apply plugin: 'com.android.library'
依赖库的 build.gradle 文件需要声明应用 Android 依赖库插件。
一个模块可以是 Android 应用模块,或者是一个 Android 依赖模块,但不能二者都是,即不能同时申请上面两种插件。
当使用 Android 插件时,不仅可以配置针对 Android 的特殊约定,还可以生成只应用于 Android 的任务。
android {
compileSdkVersion 29 // 编译的 SDK 版本
buildToolsVersion "29.0.2" // 构建工具版本
}
这是 Android 特殊约定的一部分。Android 插件为 Android 的开发需求提供了一整套的 DSL。
项目结构
Gradle Wrapper
Gradle 是一个不断发展的工具,新版本可能打破向后兼容性,使用 Gradle Wrapper 可以避免这个问题,并能确保构建时可重复的。
Gradle Wrapper 为 Windows 操作系统提供了一个 batch 文件(为其他操作系统提供了 shell 文件),当运行这段脚本时,需要的 Gradle 版本会被自动下载(如果不存在)和使用。这样就无需手动安装正确的 Gradle 版本。
terminal 上运行
$ gradlew -v
或在命令行中运行
$ gradlew.bat -v
查看 Gradle 版本号和其他额外参数信息。
运行基本构建任务
$ gradlew tasks
打印所有可用的任务列表,添加 --all 参数,会打印每个任务对应依赖的详细介绍。
$ gradlew assembleDebug
其他还有
- Check:运行所有的检查。
- Build:触发 assemble 和 check。
- Clean:清除项目的输出(output)