Gralde的task说明
Posted xjz729827161
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gralde的task说明相关的知识,希望对你有一定的参考价值。
前言
接上一篇文章提到的,task的构建有向无环图,这个是gralde后期执行的核心,这期需要重点了解下task
在写task之前,先解决一个比较重要的问题。
在gradle写代码是很痛苦的,没有提示很难保证自己写的代码是正确的,属性有哪些?不知道!方法有哪些?不知道!一直在摸瞎的路上各种尝试或者copy代码,脑阔疼。这里有一个折中的方法供大家参考下。
dependencies
gradleApi()
implementation 'com.android.tools.build:gradle:3.6.2' //版本与你在根目录下的build.gralde配置的相关
在配置了下载gradle的工具源码后,就可以到具体的类里面到底有哪些方法和属性。同时需要在写闭包的时候写上具体的类型,不要写个简写,举个例子
applicationVariants.all ApplicationVariant variant ->
variant.outputs.all BaseVariantOutput output ->
//这里面的闭包参数的类型就标明了,在写代码的时候就可以进行一定程度提示了。
创建task
task 有两个基本的闭包,doFirst, doLast,是可以声明多个闭包,最终的会形成一个集合,不是覆盖的关系,如果按照下图的方式来定义,则其执行的顺序是"1,2, 3"
方式一
task taskA
doFirst
println(1)
doLast
println(2)
doLast
println(3)
方式2
task taskA <<
这种写法与
task taskA
doLast
是等价的,是一种简写的方式。好像高版本的失效了?如果没用的不要这种简写的方式吧
方式3
project.tasks.create(name: "taskA")
查找指定的task
查找指定的task
def assembleTaskName = "taskName"
project.tasks.findByPath(assembleTaskName)
但是由于顺序的问题,如果上面的查找动作在task还没有创建之前肯定的没法找到的,一般可以采取在project扫描完成之后进行处理
project.afterEvaluate
def assembleTaskName = "taskName"
project.tasks.findByPath(assembleTaskName)
指定依赖关系
taskB 依赖于 taskA
task taskA
task taskB
taskB.dependsOn(taskA)
//这种方式的优势是可以后期指定
task taskA
task taskB(dependsOn: "taskA")
//创建时指定
task可以进行编组
taskB.group = "test"
taskA.group = "test"
//编组后,相关的task就可以在android studio中查看gradle的任务时,可以看到归类后的任务
还有 runafter之类的我用的比较少,就不列举了,如果大家感兴趣,可以直接看gradle中task的源码中有哪些方法
进行apk文件拷贝的实操代码
android
....
applicationVariants.all ApplicationVariant variant ->
variant.outputs.all BaseVariantOutput output ->
def outputFile = output.outputFile
def buildTypeName = variant.buildType.name
def flavorsName = variant.flavorName
println("assembleRelease variant outputFile " + outputFile.path)
println("assembleRelease variant buildTypeName " + buildTypeName)
def outputFilePath = outputFile.path
def assembleTaskName = "assemble" + getStringFirstUp(flavorsName) + getStringFirstUp(buildTypeName)
def flavorTargetTask = project.tasks.findByPath(assembleTaskName)
println("assembleTaskName " + flavorTargetTask)
flavorTargetTask.doLast
def targetFileDirStr = ""
File targetFileDir = new File(targetFileDirStr)
if(!targetFileDir.exists())
targetFileDir.mkdirs()
copy()
CopySpec copySpec ->
from file(outputFilePath)
into targetFileDir.getAbsolutePath()
rename
String srcFileName ->
"xxxxxx.apk"
project.afterEvaluate
def getStringFirstUp(String orignal)
if (orignal == null || orignal.isEmpty())
return orignal;
String firstchar = orignal[0]
firstchar = firstchar.toUpperCase()
if (orignal.length() > 1)
return firstchar + orignal[1..orignal.length() - 1]
else
return firstchar
以上是关于Gralde的task说明的主要内容,如果未能解决你的问题,请参考以下文章