Android开发Android开发Android开发经验谈

Gradle之Task操作

2023-11-20  本文已影响0人  奔跑吧李博
各种Task操作:
//task依赖
task hello {
    println 'Hello world!'
}
task fine(dependsOn: hello) {
    println 'I am fine'
}
//打印 Hello world!  I am fine

//任务执行开始、结束的代码执行
task firstLast {
    doLast {
        println "doLast"
    }
    doFirst {
        println "doFirst"
    }
}

//自定义任务属性,用ext声明
task myTask {
    ext.myProperty = "myValue"
}
task printTaskProperty {
    println(myTask.myProperty)
}
//打印  myValue

//定位 tasks
task location {
    //通过属性获取task
    println(project.hello.name)
    //通过tasks 集合 获取 task
    println(tasks['hello'].name)
}
//打印  hello  hello

//配置一个任务 - 通过闭包 closure
task myCopy(type: Copy)
myCopy {
    println("myCopy task")
}
//打印  myCopy task

// "must run after" 和 "should run after".
task taskX {
    println 'taskX'
}
task taskY {
    println 'taskY'
}
taskX.mustRunAfter taskY
taskX.shouldRunAfter taskY
//打印 taskX  taskY

//给任务加入描述
task description {
    description '这是一个task的description'
    println description
}
//打印 这是一个task的description

//抛出一个RuntimeException异常
task stopException {
//    throw new RuntimeException()
}

//激活和注销 tasks
task disableMe {
    println 'disableMe'
}
disableMe.enabled = false

//通过 gradle.properties 文件设置属性
task printProperties {
    println gradlePropertiesProp  //gradle属性
    println System.properties['system']  //system属性
}
//打印 gradlePropertiesValue   systemValue

//采用 Project.task(String name) 方法来创建
project.task("myTask3").doLast {
    println "doLast in task3"
}

//task类型:  包括 Copy Delete
task copyFile(type: Copy) {
    from 'xml'
    into 'destination'
}

//自定义Task
//使用自定义task,并通过constructorArgs参数来指定构造函数的参数值
task hello1(type: SayHelloTask, constructorArgs:[30]) {
    destDir = file("$buildDir/outputFile")
    sayHello() //在task中调用该task的方法
}
task hello2(type: SayHelloTask, constructorArgs:[18]) {
    msg = "libo" //在task中设置该task的属性
    sayHello()
}
//Hello,defualt name, My age is 30
//打印  Hello,libo, My age is 18


//配置TaskInputs、TaskOutputs 增量构建
//第2次运行时,test1 task 并没有运行,而是被标记为 up-to-date,而 test2 task 则每次都会运行,这就是典型的增量构建。
task test1 {
    //设置inputs
    inputs.property("name", "hjy")
    inputs.property("age", 20)
    //设置outputs
    outputs.file("$buildDir/test.txt")

    doLast {
        println "exec task task1"
    }
}

task test2 {
    doLast {
        println "exec task task2"
    }
}

参考:
https://juejin.cn/post/6844903838290296846#comment
https://doc.yonyoucloud.com/doc/wiki/project/GradleUserGuide-Wiki/index.html

demo地址:
https://github.com/running-libo/GradleStudy

上一篇下一篇

猜你喜欢

热点阅读