本文参考资料:
最重要的Gradle文档:
http://tools.android.com/tech-docs/new-build-system/user-guide
gradle user guide 的中文翻译团队(文档)
https://dongchuan.gitbooks.io/gradle-user-guide-/content/introduction.html
伯乐系列:
http://blog.jobbole.com/71999/
StormZhang(非常简单的入门):
http://stormzhang.com/devtools/2014/12/18/android-studio-tutorial4/
两个非常重要的概念
Project
Task
project包含了多个Task
一些准备工作
使用Android Studio新建的工程会默认使用Gradle做管理。所以最好新建一个实验用工程。在目录下会生成相应的Gradle文件。
对应的文件
Gradle构建脚本(build.gradle)指定了一个项目和它的任务。
Gradle属性文件(gradle.properties)用来配置构建属性。
Gradle设置文件(gradle.settings)对于只有一个项目的构建而言是可选的,如果我们的构建中包含多于一个项目,那么它就是必须的,因为它描述了哪一个项目参与构建。每一个多项目的构建都必须在项目结构的根目录中加入一个设置文件。
一个简单的Task实例
gradle 命令会在当前目录中查找一个叫 build.gradle 的文件. 我们称这个 build.gradle 文件为一个构建脚本 (build script), 但是严格来说它是一个构建配置脚本 (build configuration script). 这个脚本定义了一个 project 和它的 tasks.
例如:
新建文件build.gradle。
然后在其中新建一个任务hello
task hello{
doLast{
println 'hello task !'
}
}
然后执行
gradle hello
即会执行
:hello
hello task !
BUILD SUCCESSFUL
Total time: 0.821 secs
Android Studio 中的Gradle
这部分内容需要阅读的资料有:
Configuring Gradle Builds
http://developer.android.com/intl/zh-cn/tools/building/configuring-gradle.html
在AS中新建一个工程,可以发现两个有意思的事情。
1.在工程的根目录下。有一个build.gradle,而在module下,同样有一个build.gradle。
2.gradlew*这一类文件是什么用途?
dongergoudeMacBook-Pro:low Fridge$ pwd
/Users/Fridge/Desktop/pp/low
dongergoudeMacBook-Pro:low Fridge$ tree -L 2
.
├── build
│ └── intermediates
├── build.gradle
├── gradle
│ └── wrapper
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
├── low.iml
├── low_main
│ ├── build
│ ├── build.gradle
│ ├── libs
│ ├── low_main.iml
│ ├── proguard-rules.pro
│ └── src
└── settings.gradle
问题1:外层的build.gradle
module low_main中的build.gradle 暂且不表。
外层build.gradle:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
这里这个buildScript是做什么的呢?我在这里找到了答案:
http://www.cnblogs.com/huang0925/p/3940528.html
大致是说,这个东西是gradle自身脚本运行时所需要的依赖。
问题2:奇怪的gradlew
这个问题的答案在这里:
https://docs.gradle.org/current/userguide/gradle_wrapper.html
大意是说:是为了统一gradle的版本,在运行gradlew的时候会去下载这个gradle中规定的版本。这也是为什么我们导入工程时,gradle会有一个gradle wrapper的选项了。