最开始为了调研多渠道打包来到过这个 后来Google出了AndroidStudio 所以又研究了一下~
下载Gradle之后添加到环境变量
C:\Users\Administrator>gradle --version
------------------------------------------------------------
Gradle 1.7
------------------------------------------------------------
Build time: 2013-08-06 11:19:56 UTC
Build number: none
Revision: 9a7199efaf72c620b33f9767874f0ebced135d83
Groovy: 1.8.6
Ant: Apache Ant(TM) version 1.8.4 compiled on May 22 2012
Ivy: 2.2.0
JVM: 1.7.0_17 (Oracle Corporation 23.7-b01)
OS: Windows 7 6.1 amd64
这样算是安装成功了,Gradle是通过任务(Task)的方式来管理工程的,Gradle的默认文件名是 build.gradle
一个HelloWorld任务如下
//build.gradle
task hello {
println 'Hello world!'
}
执行 gradle hello
会打印:
C:\Users\Administrator>gradle hello
Hello world!
:hello UP-TO-DATE
BUILD SUCCESSFUL
gradle hello
是告诉Gradle执行 hello
这个任务,如果没有指定文件名,Gradle会默认执行 build.gradle
中定义的任务.你可能注意到 println 'Hello world!'
这是一条Groovy的语句,在Gradle的文件中可以直接写Groovy脚本(Groovy 是兼容java的),所以可以直接写出 println 'it's a string'
这样的语句。
更复杂一点,引用一个java插件,java插件会预定一系列任务,可以直接调用或者组合这些任务来构造更复杂的任务。
工程目录:
D:.
├─src
│ └─Test.java
└─build.gradle
build.gradle
//build.gradle
//引用Gradle的java插件
apply plugin: 'java'
//设置兼容Java5
sourceCompatibility = 1.5
//输出jar包版本
version = '1.0'
buildscript {
repositories {
//依赖管理这个待会再看
mavenCentral()
}
}
sourceSets {
main {
java {
//源码路径,我用的是Eclipse工程
srcDir 'src'
}
}
}
首先 apply plugin: 'java'
这样就可以引用java插件,然后设置依赖管理,如果没有指定源码的路径,Java插件会默认到 main/java/**下寻找源码,我用的Eclipse配置所以手动设置了源码的路径在根目录的 src , 执行 gradle jar
发现会多了一个目录 build
里面增加了几个文件和目录,这是因为jar是java插件的一个任务,执行这个任务之后会编译源码并导出jar包。
D:.
├─.gradle
│ └─1.7
│ └─taskArtifacts
├─.settings
├─build
│ ├─classes
│ │ └─main
│ ├─dependency-cache
│ ├─libs
│ └─tmp
│ └─jar
└─src
还记得这句话吗 mavenCentral()
它是告诉Gradle要去这个地方寻找依赖, 这是Maven的CentralRepo 添加依赖更简单
dependencies {
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
}
这样工程编译的时候就会自动到 maven central 上寻找commons-collections-3.2.jar 这个依赖。有些时候依赖的包可能不在Maven Central或者 其他的托管服务器上(比如Apache IVY、Bintray等),需要设置本地依赖,最常见的就是在工程下放一个 libs 目录用来存放第三方依赖,配置本地依赖同样简单
dependencies {
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
compile fileTree(dir: 'libs', include:['*.jar'])
}
那么如何调度任务呢?
任务依赖,一个很复杂的任务可以分解成很多串联的小任务来完成,任务相互依赖就可以一次完成整个任务了
task hello {
println 'hello'
}
task world(dependsOn: hello){
println 'world'
}
执行 gradle world
hello
world
:hello UP-TO-DATE
:world UP-TO-DATE
BUILD SUCCESSFUL
如果依赖多个任务可以这么写:dependsOn:[task1, task2, task3…]
配置已有任务,对于大多数情况下任务都是类似或者重复的比如把java源码编译成 class 文件打成jar包,这样的任务Java插件都是默认提供的 或者把文件(夹)从A复制到B,对于我们来说只要做一些简单的配置就可以完成我们需要的功能,比如Copy这样的任务
task myCopy(type: Copy){
from 'resources'
into 'target'
include('**/*.txt', '**/*.xml', '**/*.properties') //设置一些过滤条件
}
通过任务配置和任务依赖可以组合出非常复杂的功能。
使用java插件只需要 apply plugin: ‘java’ 就行了,在目前为止Gradle并没有集成Proguard功能或者有Proguard插件可以使用,如果需要使用需要自己配置,
buildscript {
repositories {
//配置Maven central
mavenCentral()
//配置本地搜索目录
flatDir dirs: 'scripts/tools' //config proguard location
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
//配置Proguard插件
classpath ':proguard'
}
}
}
task bar(){
foo()
}
public void foo(){
println 'fooooo'
}
是不是很惊艳,可以直接在Gradle的文件中写函数执行~~~
仅作记录方便回忆,Gradle官方提供的文档非常全面