推荐文章:https://blog.csdn.net/chennai1101/article/details/103280304
一种创建并执行Gradle Task的方式
=========================================================
gradle依赖演示
创建一个config.gradle文件,并在其中定义一个task
选择一个gradle文件,比如build.gradle,注释掉所有原来的代码,并写入下面的内容,然后执行build.gradle中创建的task,发现先执行apply from中定义的task
========================================================
实现一个Task,执行它能创建文件,并填充文件内容
class MyTask_Input_Output extends DefaultTask{
@Input
@Optional //表示这个属性可选,不必在初始化这个类的时候传入这个参数
String input
@OutputFile
@Optional
File output
MyTask_Input_Output(){
group "自定义任务"
}
@TaskAction
void action(){
// println "==================================="
// println input
println output
// println "==================================="
println inputs.files.singleFile
def inFile = inputs.files.singleFile
def file = outputs.files.singleFile
file.createNewFile() //创建test.txt文件
file.text = inFile.text //填充test.txt文件的内容为build.gradle文件中的内容
}
}
tasks.create("myTask_Input_Output", MyTask_Input_Output){
// input = "a/b/c"
output = file("test.txt") //在当前目录定义一个文件,注意是定义不是创建
inputs.file file('build.gradle')
outputs.file file('test.txt')
}
=========================================================
实现一个Task,使它能将build/outputs文件夹下的所有文件压缩为zip文件,并将压缩后的zip文件放到build/custom文件夹下
//将app/build/outputs下的文件全部压缩成output.zip文件,并且将output.zip文件放到app/build/custom下
task zip2(type: Zip){
println buildDir
archiveName "output.zip"
destinationDir file("${buildDir}/custom")
from "${buildDir}/outputs"
}
=========================================================
实现一个task,将debug apk再次压缩成zip文件,存放到另一个目录
//将生成的debug apk,重新压缩成output2.zip文件,并且将output.zip文件放到app/build/custom下
afterEvaluate { //afterEvaluate这个task是等所有的task执行完后才执行,也就是说此时肯定打包完了
println "============================"
println tasks.getByName("packageDebug")
task zip3(type: Zip){
println buildDir
archiveName "output2.zip"
destinationDir file("${buildDir}/custom")
from tasks.getByName("packageDebug").outputs.files
tasks.getByName("packageDebug").outputs.files.each{
println it
}
}
}
=========================================================
Gradle的钩子函数
//初始化阶段的两个钩子函数:
gradle.projectsLoaded
gradle.settingsEvaluated
以上两个钩子函数只能在setting.gradle文件中使用
//初始化阶段
gradle.projectsLoaded{
println "============== projectsLoaded =============="
}
gradle.settingsEvaluated {
println "============== settingsEvaluated =============="
}
注意,在setting.gradle文件中配置好上面的代码后,需要点击build->Rebuild才能执行
除了上面两个钩子函数外,还有
gradle.beforeProject
gradle.afterProject
gradle.taskGraph.whenReady
gradle插件
二进制写法:
//在app/build.gradle写入下面内容
class MyTask implements Plugin<Project> {
@Override
void apply(Project project) {
println "======== MyTask apply ========"
}
}
apply plugin:MyTask