gradle task一些实践

在使用jenkins与walle结合的时候,需要用到gradle task的一些功能,使用task来做一些事情,就有了一些实践。

task的调用,怎么运行

1、taskname.execute()
2、gradle taskname

比如一个简单的例子

task task1 << { 
     println "Hello" 
} 
task task2 << { 
    println "World" 
} 
task task3(dependsOn: 'task3dependency') << { 
    println "Yu" 
} 
task task3dependency << { 
    println "Duke" 
} 
task tests(dependsOn: ['task1', 'task2', 'task3']) {
}

输出的是
Hello World Duke Yu
这种写法是顺序执行,另外有一种写法是异步执行,如

task tests << { 
    task1.execute()
    task2.execute() 
    task3.execute() 
}

是没法确定结果的,因为闭包是异步的。

再比如,假设我们要在assembleDebug后加一个task(runTask),
可以这样做,利用gradle.taskGraph.afterTask找到task,执行命令
gradle assembleDebug

gradle.taskGraph.afterTask { task ->
    if (task.name == 'assembleDebug') {
        runTask.execute()
    }
}

实际上跑的命令是

assembleDebug
runTask

或者 定义一个task(runTask)依赖于assembleDebug,执行命令
gradle runTask

task runTask(dependsOn: 'assembleDebug') {
}

实际上跑的命令是

assembleDebug
runTask

关于copy

可以在task里直接写copy,比如

gradle.taskGraph.afterTask { task ->
    if (task.name == 'assembleDebug') {
        copy {
            from "${project.buildDir}/outputs/apk/app-debug.apk "
            into "${project.buildDir}/outputs/apk/"
            rename { String fileName ->
                fileName.replace("app-debug.apk", “test.apk”)
            }
        }
    }
}

也可以写一个copy类型的task

task copyApk(typy: copy)  {
    from "${project.buildDir}/outputs/apk/app-debug.apk "
    into "${project.buildDir}/outputs/apk/"
    rename { 
        String fileName ->
        fileName.replace("app-debug.apk", “test.apk”)
    }
}