这一系列文章本是我最近看《Gradle for Android》这本书的笔记。虽然我也买了中文版,但是包含很多机翻的痕迹;另外翻译过程中会把很多关键字翻译成中文,反而会变得难以理解,所以还是看了英文版。
当然,这系列文章并不是翻译,而是笔记。省略了很多我认为不重要的细节,或者一些过于简略的独立话题的概述,因为独立话题一般都有官方文档可供查阅;部分内容也有按我的思路整理。当然,也有我自己添加的内容。如果你也想了解一些Gradle相关的内容,除了文档之外,希望这一系列文章能够帮助到你。
目前我还没有完全看完这本书,所以这一系列会持续更新完成。前几天看到某个网站上有一系列这本书的翻译文章,本以为相见恨晚,但更新到一半就终止了;而实际上刚好后面的内容就是自定义Task之类的实用内容,真是可惜。好啦,让我们开始吧。
Gradle 和 Android Studio
- Gradle 是一个独立的构建系统,和Android Studio并无绑定关系,可以独立运行于服务器进行持续集成。
- Gradle 倾向于使用约定和习惯进行管理和配置,这可以简化工作。Gradle大量使用默认配置简化项目中的配置工作,所以一般不需要额外配置。
- 比如:build.gradle这个文件名就是一个约定俗成。
- Gradle 脚本使用基于Groovy的DSL(Domain-Specific Language,领域特定语言)语言进行编写。Groovy是针对JVM的动态语言。
- 因为Groovy是基于JVM的,所以可以使用Java或其他基于JVM的语言编写Gradle插件。
构建系统
- Projects,Tasks,Actions
- Project:每个构建由至少一个Project构成。
- Task:Task由构建语言描述,每个Project包含多个Tasks。
- Action:类似一个Java方法。每个Task包含多个Action,按顺序执行。
- 为了简化构建过程,Gradle会为工作流建立一个单向单次图。(DAG,Directed Acyclic Graph)
生命周期
- Initialization 初始化:创建Project实例。每个Module/每个build.gradle文件都对应一个Project实例。
- Configuration 配置:针对每个Project实例,创建和配置其中的Tasks。Tasks之间的依赖关系就是在这个阶段生成的。
- Execution 执行:执行特定的Tasks。Task是否执行依赖于启动构建的参数和当前的目录。
1
2
3
4
5
6
7
8
9
10
11
12
13
14// 构建脚本
buildscript {
// 依赖源
repositories {
// 使用JCenter作为依赖源
// JCenter源为Gradle内置,所以无需额外配置。
jcenter()
}
// 依赖
dependencies {
// Android构建工具
classpath 'com.android.tools.build:gradle:1.2.3'
}
}
Android应用应当使用Application插件,Android库应当使用Library插件。
- Android应用
apply plugin: ‘com.android.application’
- Android库
apply plugin: ‘com.android.library’
- Android应用
- Android项目定制的配置项在
android
关键字下。1
2
3
4
5
6
7// Android配置项
android {
// 编译SDK版本
compileSdkVersion 22
// 构建工具版本
buildToolsVersion "22.0.1"
}
Gradle Wrapper
- Gradle Wrapper 是对Gradle的包装,可以避免因为Gradle升级带来的兼容问题。同时Gradle Wrapper会自动下载对应的Gradle版本,对于服务器构建来说,比较方便。
- 运行Gradle Wrapper只需要执行
gradlew
命令或者gradlew.bat
壁橱里文件即可。 - 在项目根目录下使用
./gradlew -v
命令查看Gradle 版本和构建系统信息(系统版本,Ant版本,时间,JVM版本)。 从Eclipse迁移,生成Gradle Wrapper文件。(新建Android Studio项目会自动生成。)
安装好Gradle后,创建
build.gradle
文件,写如下Task
。1
2
3task wrapper(type: Wrapper) {
gradleVersion = '2.4'
}执行
gradle wrapper
- 或者直接执行
gradle wrapper —gradle-version 2.4
。(新版本Gradle内置wrapper任务)
- Gradle Wrapper包含的文件结构:
1
2
3
4
5
6myapp/
├── gradlew
├── gradlew.bat
└── gradle/wrapper/
├── gradle-wrapper.jar
└── gradle-wrapper.properties
基础Gradle Tasks
./gradlew tasks
查看当前项目的Tasks,—all
查看更详细的信息(Tasks依赖)。- 构建
./gradlew assembleDebug
,驼峰式简写./gradlew assDub
,./gradlew aD
。简写会优先完全相同名称的tasks。 - 其他基础Tasks
check
:运行测试。build
:执行assemble
和check
clean
:清理输出目录。
从Eclipse迁移到Android Studio
- NR
总结
- Gradle独立于Android和Android Studio。
- Gradle使用很多的默认配置和约定俗成,所以写出来的配置通常很少。
- 关键概念Project,Task,Action。三者是依次包含的关系。
- Gradle执行时会创建多个Tasks的单向执行图,按照顺序依次执行。
- Android项目为了使用Gradle构建,需要Gradle依赖Android构建工具。
- Android项目由一个或多个Module组成,每个Module和他们外层的Project都对应一个Gradle的Project。
- 使用gradlew命令构建,提升兼容性和可靠性。
- 基础Tasks,
assemble
,build
,check
,clean
等。
其他文章