标签:最简 def targe put dep 属性 自己 ref 技术
在看文章之前,希望知其所以然的同学肯定希望能看到gradle相关的api,那么先行奉上gradle api的链接:
https://docs.gradle.org/current/javadoc/allclasses-noframe.html
由于gralde使用的是groovy语言,所以语法看上去比较奇怪,好像描述性语言一样,不过,这对于创建一个工程来说已经足够了。
同其他的语言一样,groovy语言也有很多关键字,也有类型,task也是groovy语言中的一个类,配合内部的一些属性方法和固有的关键字,我们可以写出形形色色的task,来帮助我们做一些自动化的操作。
创建一个最简单的task应该是这样的:
task print{ print ‘hello world‘ }
task还提供了设置多个task之间的相互依赖关系,就可以用dependson关键字,如果任务不是你定义的,而是系统定义的,你想指定运行的先后顺序,也可以用mustRunAfter指定
task a(dependson:taskb){//可以写在括号内 println "i am a" } task a(dependson:[taskb,taskc]){//也可以以数组的形式依赖多个数组 println "i am a" } task a{//也可以分开写 println "i am a" dependson taskb dependson taskc }
build.mustRunAfter clean//android studio为我们定义好的task build 和clean 我们可以拿来直接使用
更进一步,配合上最常用的doFirst,doLast和dependson我们可以写出以下四个task
task task2{
println "task2"
}
task task3{
println "task3"
}
task task4{
println "task4"
}
task task1(dependsOn:[task2,task3,task4]){
println "task1"
doFirst{
println "task1 first"
}
doLast{
println "task1 last"
}
}
//输出结果
task2
task3
task4
task1
task1 first
task1 last
可以看到,优先顺序为depensOn>自己>doFirst>doLast
不只是顺序,使用标准的task api,我们可以创建形形色色的任务,完成我们的需求
task showTasks{ println tasks.class println tasks.size() } //output class org.gradle.api.internal.tasks.DefaultTaskContainer_Decorated 15//可以看到,tasks.size()是build下的任务总数,但其实,目录中所有的任务都是project的任务,详情见附图
例如 你想在project build之前做一些拷贝so的操作:
project.preBuild.doFirst{
delete "../sdk/src/main/jniLibs/arm64-v8a"
copy{
from "../models/armeabi-v7a"
include "**.so"
into "../sdk/src/main/jniLibs/armeabi-v7a"
rename {
String fileName ->
"libss.so"
}
}
}//执行gradle preBuild时候,就会执行拷贝文件的操作
task hello {
doFirst{
println description//输出this is hello
}
}
hello.configure {//定义hello的属性
description = "this is hello"
}
但如果修改hello的定义为如下:
task hello {
println description //输出null,可以看到description的定义要在默认体和doFirst之间
}
常用的基本是这么多,如果有进一步需求,可以参考官方api
标签:最简 def targe put dep 属性 自己 ref 技术
原文地址:http://www.cnblogs.com/gangmiangongjue/p/7652918.html