来自Gradle的hello world

来自Gradle的hello world

Android Studio使用Gradle 构建项目

为什么要用Gradle?

Gradle是比较先进的构建系统,也是一个很好的构建工具,允许通过插件自定义构建逻辑

为什么Android Studio选择Gradle?

  • 使用领域专用语言(Domain Specific Language)来描述和处理构建逻辑。(以下简称DSL)
  • 基于Groovy。DSL可以混合各种声明元素,用代码操控这些DSL元素达到逻辑自定义。
  • 支持已有的Maven或者Ivy仓库基础建设
  • 非常灵活,允许使用best practices,并不强制让你遵照它的原则来。
  • 其它插件时可以暴露自己的DSL和API来让Gradle构建文件使用。
  • 允许IDE集成,是很好的API工具

下载 配置

  1. Gradle官网 下载 最新版本(目前最新2.6)
  2. 设置环境变量
  • 添加GRADLE_HOME环境变量来制定Gradle的安装目录
  • 添加GRADLE_HOME\bin到path环境变量中
  1. 检查测试配置结果
    打开命令行,输入 gradle -v
    这里写图片描述

    Hello World

    你可以通过 gradle命令运行一个Gradle构建. gradle命令会在当前目录中查找一个叫build.gradle 的文件. 我们称这个build.gradle文件为一个构建脚本 (build script),但是严格来说它是一个构建配置脚本 (build configuration script). 这个脚本定义了一个 project 和它的tasks.

创建 build.gradle 文件

1
2
3
4
5
task hello{
doLast{
println 'Hello world!'
}
}

进入文件所在目录, 运行命令 gradle -q hello
输出:
这里写图片描述
这个构建脚本定义了一个独立的 task,叫做hello, 并且加入了一个 action. 当你运行 gradle hello, Gradle 执行叫做 hello 的 task, 也就是执行了你所提供的 action. 这个 action 是一个包含了一些 Groovy 代码的闭包.

-q : 代表quite模式.它不会生成 Gradle 的日志信息 (log messages), 所以用户只能看到tasks 的输出. 它使得的输出更加清晰. 你并不一定需要加入这个选项.

便捷的定义

1
2
3
task hello	<< {
println 'Hello world!'
}

与前面的例子比较, doLast 被替换成了 << 它们有一样的功能, 但看上去更加简洁了

构建脚本代码

1
2
3
4
5
task upper << {
String someString = 'my_name'
println "Original: " + someString
println "Upper case: "+ someString.toUpperCase()
}

运行: gradle -q upper
结果:
这里写图片描述
在 Gradle 任务里使用 Groovy

1
2
3
4
task count << {
4.times { print "$it " }
println ""
}

输出:

这里写图片描述

任务依赖

1
2
3
4
5
6
7
task hello << {
println "Hello World!"
}

task intro(dependsOn: hello) << {
println "I'm Gradle"
}

运行: gradle -q intro
结果:

这里写图片描述

intro 依赖于 hello, 所以执行 intro 的时候 hello 命令会被优先执行来作为启动 intro 任务的条件.
在加入一个依赖之前, 这个依赖的任务不需要提前定义, 来看下面的例子

1
2
3
4
5
6
7
task taskY(dependsOn: 'taskX') << {
println "taskY"
}

task taskX << {
println "taskX"
}

这里写图片描述