第十一章 gradle自动化构建系列文章 之 gradle中的task

第十一章 gradle自动化构建系列文章 之 gradle中的task

< center>

查看 “Android自动化构建系列” 全部文章

一、 task的定义和配置

1. 查看当前工程下的所有task

命令:

gradle tasks

运行结果:

2. task创建

创建第一个task ,可以以输出 hellotask为例子,这里总结几种常用的任务创建方式

2.1 调用Project的task()方法创建Task

// 调用Project的task关键字创建 Task
task helloTask{
    println "hello task"
}

运行结果:

他还有一种变形

// 这里的 << 表示追加的意思, 向hello1 task中追加执行过程
task helloTask<<{
    println "hello task"
}




//上面的代码是和下面之中代码是等价的(后面详细讲解)
task helloTask {
	doLast{
	 	println "hello task"
	}
}




//也可以这样写

task helloTask {
	println "我会执行在配置阶段"
}

helloTask.doLast{
	 println "我会执行在执行阶段"
}

//输出结果
我会执行在配置阶段
我会执行在执行阶段

在上面的几个例子中,Gradle的DSL向我们展示了一种非常自然的风格来创建Task,而事实上这些都只是一种内部DSL,也即必须符合groovy的语法要求。

上面的task关键字实际上是一个方法调用,该方法属于Project。Project中存在多个重载的task()方法。和Ruby等动态语言一样,在调用groovy方法时,我们不用将参数放在括号里面。

以上我们自定义的几个Task都位于TaskContainer中,Project中的tasks属性即表示该TaskContainer。为此,我们可以新建一个Task来显示这些信息:

	task printlnAllTask<<{
	    tasks.eachWithIndex {task,index->
	        println "${index}     ${task.name}"
	    }
	}

执行结果:

0     androidDependencies
1     assemble
2     assembleAndroidTest
3     assembleDebug

	...

94     helloTask
95     outputApp1
96     outputApp2
	...
128     signingReport
129     sourceSets
130     test
131     testDebugUnitTest
132     testReleaseUnitTest
	...
154     uninstallAll
155     uninstallDebugAndroidTest
156     validateSigningDebugAndroidTest
157     verifyReleaseResources

2.2 通过TaskContainer的create()方法创建Task

在上文中我们讲到,通过task()方法创建的Task都被存放在了TaskContainer中,而Project又维护了一个TaskContainer类型的属性tasks,那么我们完全可以直接向TaskContainer里面添加Task。

通过TaskContainer的API文档可以发现,TaskContainer向我们提供了大量重载的create()方法用于添加Task。

// 通过TaskContainer 方式创建Task
tasks.create(name: 'hello4') << {
    println 'hello4'
}

运行结果:

3. 配置Task

一个Task除了执行操作之外,还可以包含多个Property,其中有Gradle为每个Task默认定义的Property,比如description,logger等。

另外,每一个特定的Task类型还可以含有特定的Property,比如Copy的from和to等。

当然,我们还可以动态地向Task中加入额外的Property。在执行一个Task之前,我们通常都需要先设定Property的值,Gradle提供了多种方法设置Task的Property值。

  • 查看源码可以得到所有可以配置的变量
属性名称 属性描述
group task 所在的分组,所有的task将按照这个分组归类,方便我们以后的查看
description 对当前task的描述,方便阅读
name 指定当前task的名称
type 指定当前task的类型
dependsOn 指定当前task与其他task之间的依赖关系
overwirte 重写执行task
action 为task配置执行的逻辑

创建时候配置

//group : task 所在的分组,所有的task将按照这个分组归类,方便我们以后的查看 ;description : 对当前task的描述,方便阅读
task helloTask(group:"study",description:"task 创建学习"){
    
    println "hello task"

    doFirst{
        println "doFirst 1"
    }
    doFirst{
        println "doFirst 2"
    }
    doLast{
        println "doLast 1"
    }
    doLast{
        println "doLast 2"
    }
}

	
	
	helloTask.doFirst{
	    println "doFirst 3"
	}
	
	
	helloTask.doLast{
	    println "doLast 3"
	}

看看所有的task:

闭包中进行配置

	task helloTask {
	    setGroup("Study")
	    setDescription("创建学习")
	    println "hello task"
	
	    doFirst {
	        println "doFirst 1"
	    }
	    doFirst {
	        println "doFirst 2"
	    }
	    doLast {
	        println "doLast 1"
	    }
	    doLast {
	        println "doLast 2"
	    }
	}
	
	
	helloTask.doFirst {
	    println "doFirs
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值