Gradle简介
Gradle,是一个基于 JVM 的富有突破性构建工具,基于 groovy,其 build 脚本使用 groovy dsl 编写!
任何一个 Gradle 构建都是由一个或多个 project组成。每个 project 包括许多可构建组成部分,由多个 tasks 组成。每个 task 都代表了构建执行过程中的一个原子性操作,如编译,打包等。
构建简单Task
task hello << {
println 'Hello world!'
}
//Android Studio命令行执行gradlew hello 输入: Hello world!
//将 test文件夹里的内容copy到dest文件夹里
task copyFile(type: Copy){
from 'test'
into 'dest'
}
在两个任务之间指明依赖关系
task A << {
println 'Hello world!'
}
task B(dependsOn: A) << {
println "I'm Gradle"
}
上面表示B依赖于A,运行B时会先执行A。
Gradle一些常用Task
projects 和 tasks是 Gradle 中最重要的两个概念,可以通过gradlew tasks
和gradlew projects
运行
gradlew tasks
------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------
Android tasks
-------------
androidDependencies - Displays the Android dependencies of the project.
signingReport - Displays the signing info for each variant.
sourceSets - Prints out all the source sets defined in this project.
Build tasks
-----------
assemble - Assembles all variants of all applications and secondary packages.
assembleAndroidTest - Assembles all the Test applications.
assembleDebug - Assembles all Debug builds.
assembleRelease - Assembles all Release builds.
build - Assembles and tests this project.
classes - Assembles main classes.
clean - Deletes the build directory.
jar - Assembles a jar archive containing the main classes.
testClasses - Assembles test classes.
...
To see all tasks and more detail, run gradlew tasks --all
To see more detail about a task, run gradlew help --task <task>
BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed
从上面运行结果可以看到各个task的名称和作用,如dependencies用于显示Project的依赖信息,projects用于显示所有Project,包括根Project和子Project,而properties则用于显示一个Project所包含的所有Property。
自定义Task
创建Task可以由多种方式实现:
task hello << {
println "hello world"
}
project.task('hello ').doLast {
println "hello world"
}
project.tasks.create('hello ').doLast {
println "hello world"
}
以上三种方式都可以创建task.
- doFirst:task执行时,最开执行的操作
- doLast:task执行时,最后执行的操作
另外,自定义task默认分组other,可以为task指定分组:
task("hello3", group: "android").doLast {
println("hello3")
}
效果图
Gradle执行时序
Gradle执行分为两个阶段:配置和执行
配置:首先解析settings.gradle, 解析各个moudle并为其创建project实例,然后读取所有build.gradle文件的所有内容来配置Project和Task等,比如设置Project和Task的Property,处理Task之间的依赖关系等。
执行:根据各个task依赖关系,执行task
task hello1 {
println("hello11")//编译阶段执行
doLast {//执行阶段
println("hello111")
}
}
task hello2 {
println("hello22")
doLast{
println("hello222")
}
}
//hello1依赖hello2 执行hello1时会先执行hello2
hello1.dependsOn(hello2)
运行结果如下
> Configure project :app
hello11
hello22
> Task :app:hello2
hello222
> Task :app:hello1
hello111
可以发现,先对各个任务进行配置,执行时被依赖的task优先执行
自定义Project属性
Gradle在默认情况下已经为Project定义了很多Property,其中比较常用的有:
- project:Project本身
- name:Project的名字
- path:Project的绝对路径
- description:Project的描述信息
- buildDir:Project构建结果存放目录
- version:Project的版本号
version = "1.0.0"
description = "test"
task showProjectProperties << {
println version
println project.description
}
1.0.0
test
自定义额外属性时,需要借助ext
ext.costomProp1 = "The first prop"
ext{
costomProp2 = "two"
}
task showCostomProp <<{
println costomProp1
println costomProp2
}
The first prop
two