一、在Windows平台安装
在系统变量中添加GRADLE_HOME
然后再将%GRADLE_HOME%\bin添加到path系统变量中就可以了,运行gradle -v命令来进行验证。
二、实现HelloWorld
build.gradle为Gradle默认的构建脚本文件,运行Gradle 命令时,会从当前目录下寻找 build.gradle 文件来执行构建。
先创建一个目录,E:\Android|gradle_demo,在其中创建build.gradle文件,并在其中输入:
task hello {
doLast {
println 'Hello world!'
}
}
然后在该文件所在目录下运行gradle -q hello构建脚本, 就会打印出“Hello world!”。
task(任务)和action(动作)是Gradle的重要元素。上面的代码中,task代表一个独立的原子性操作,比如复制一个文件,编译一次Java代码,这里我们简单的定义一个名为hello的任务。doLast 代表task执行的最后一个action,通俗来讲就是task执行完毕后会回调doLast中的代码,在上面这个例子中就会打印 'Hello world!'
上面的例子还可以写的更简单一点,用到了操作符<<,效果是一样的。
三、Gradle任务
这里简单的介绍下Gradle的任务,包括创建任务、任务依赖、 动态定义任务和任务的分组和描述。
1.创建任务
除了上述例子的那种创建任务方式,还有三种创建方式。
(1)直接用任务名称创建
def Task hello=task(hello)
hello.doLast{
println "Hello World!"
}
(2)任务名称+任务配置创建
def Task hello=task(hello,group:BasePlugin.BUILD_GROUP)
hello.doLast{
println 'Gradle'
}
(3)TaskContainer的create方法创建
tasks.create(name: 'hello') << {
println 'hello world'
}
此前创建任务的方式最终都会调用tasks的create方法,其中tasks类型为TaskContainer。
2.任务依赖
任务依赖会决定任务运行的先后顺序,被依赖的任务会在定义依赖的任务之前执行。
task hello << {
println 'Hello world'
}
task go(dependsOn:hello) << {
println "go for it"
}
在hello任务的基础上增加了一个名为go的任务,通过dependsOn来指定依赖的任务为hello,因此go任务运行在hello之后。
运行gradle -q go构建脚本,打印结果如下:
Hello world!
go for it
3.动态定义任务
动态定义任务指的是在运行时来定义任务的名称
3.times {number ->
task "task$number" << {
println "task $number"
}
}
这里用到了Groovy语法,关于Groovy语法会在本系列后续的文章进行介绍。times是Groovy在java.lang.Number中拓展的方法,是一个定时器。3.times中循环创建了三个新任务,隐式变量number的值为0,1,2,任务的名称由task加上number的值组成,达到了动态定义任务的目的。
运行gradle -q task2构建脚本,打印结果如下:
task 2
4.任务的分组和描述
Gradle有任务组的概念,可以为任务配置分组和描述,以便于更好的管理任务,拥有良好的可读性。
改造2的例子,为任务hello添加分组和任务描述。
task hello{
group='build'
description='hello world'
doLast{
println "Task Group:${group}"
println "Task Description:${description}"
}
}
task go(dependsOn:hello) << {
println "go for it"
}
也可以采用其他的创建方式来为任务添加分组和描述。
def Task hello=task(hello)
hello.description ='hello world'
hello.group=BasePlugin.BUILD_GROUP
hello.doLast{
println "任务分组: ${group}"
println "任务描述: ${description}"
}
task go(dependsOn: hello) << {
println "go for it"
}
四、Gradle日志级别
和Android一样,Gradle也定义了日志级别。
前面我们通过gradle -q +任务名称来运行一个指定的task,这个q是命令行开关选项,通过开关选项可以控制输出的日志级别。
五、Gradle命令行
从命令行的角度,Gradle和Git类似,命令都可以用一些IDE、图形工具来代替,但是如果你对Gradle 命令行熟悉,会帮助你更好的理解Gradle,高效的运用Gradle。
1.获取所有任务的信息
如果我们不知道任务的名称,可以通过gradle -q tasks来获取所有的任务信息,这样就不用打开源码了。
默认情况下,只会显示那些被分组的任务的名称和描述。比如Build tasks(Build 任务组)中有我们定义的hello任务,Build Setup tasks中有init和wrapper,Help tasks有buildEnvironment 和components等等。
2.排除任务
如果不想运行go任务,可以运行gradle hello -x go命令:
可以看出,并没有运行go任务。
3.获取任务帮助信息
通过运行gradle -q help --task hello命令来显示hello任务的帮助信息。
可以看到hello任务的路径、类型、描述和分组。
4.多任务调用
task helloWorld << {
println 'Hello world!'
}
task goForit << {
println "go for it"
}
通过命令行一次执行多个任务,每个任务通常只会执行一次,无论是在命令行中指定任务还是任务依赖,上面的例子我们运行gradle helloWorld goForit,会先执行helloWorld任务后执行goForit任务。
5.任务名称缩写
可以对使用驼峰命名的任务进行缩写,对于名称特别长的任务这个特性非常有用,比如5.4小节中的例子只需要执行gradle hW gF 就可以了,不过需要注意一点,那就是任务名称的缩写必须是唯一的,如果5.4小节中第二个任务的名称为helloWangshu,那么就会报错。