gradle 是什么?
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。
Groovy:Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。由于其运行在 JVM 上的特性,Groovy 可以使用其他 Java 语言编写的库。关于groovy语言的api http://www.groovy-lang.org/api.html
领域特定语言(DSL):不同于普通的跨领域通用计算机语言(GPL),领域特定语言只用在某些特定的领域。 比如用来显示网页的HTML语言,以及Emacs所使用的Emac LISP语言。代表语言Gradle
构建:最早的构建工具makefile, android ndk 使用的Android.mk 就是一种makefile。在gradle之前,java常用的构建工具是ant 和 maven,都是基于xml做配置。gradle算是比它们更进一步,它的配置使用领域特定语言。比如android{} signingConfigs{} buildTypes{} productFlavors{} dependencies{}都是领域特定语言。android都有哪些领域特定语言。可以上这个网站,有详细的介绍http://tools.android.com/tech-docs/new-build-system/user-guide
如何开始使用gradle
Gradle的官网:http://gradle.org/
两种方式
- 下载gradle到本地 配置环境变量
- 使用gradlew(gradlewrapper) Gradlew是包装器,自动下载包装里定义好的gradle版本,保证编译环境统一,即使本地不安装gradle,也可以使用gradle进行编译,使用gradle-wrapper.properties指定gradle版本,第一次编译时会自动下载指定的版本
gradle 是一个构建工具,是一种语言(领域特定语言),也是一种可编程的框架
gradle 中每一个待编译的工程都是一个project,每一个project中都包含多个task,我们可以使用 gradle tasks 列出project中包含多所有task。
gradle project
一个 gradle 构建环境可以包含多个project,每个project 中有一个build.gradle。如果有多个project,那么在根project中会有一个settings.gradle告诉gradle 有多少个project,当然,根project也会有一个build.gradle。我们在编写构建脚本的时候,其实是在操作project这个领域对象
比如我们可以定义一个task显示所有project的名字
allprojects {
task allTask << {
println project.name
}
}
我们也可以使用gradle的命令查看工程信息 gradle projects
gradle task
Task是Gradle中的一种数据类型,它代表了一些要执行或者要干的工作。不同的插件可以添加不同的Task。每一个Task都需要和一个Project关联。
我们可以通过命令 gradle tasks 查看工程中所有的task
定义task的方式
task myTest1 << {
println '测试1'
}
task myTest3 {
doLast {
println '测试3'}
}
task myTest4 {
doFirst {
println 'doFirst 测试4'}
doLast {
println 'doFirst 测试4'}
}
task type
task makeJar(type: Copy) {
delete "build/libs/${jarName}"
from('build/intermediates/bundles/release/')
into('build/libs/')
include('classes.jar')
rename('classes.jar', jarName)
}
gradle task 依赖
task hello << {
println 'Hello world!'
}
task intro(dependsOn: hello) << {
println "I'm Gradle"
}
依赖的执行顺序,先执行 hello 后执行 intro