gradle android的task任务配置

本文详细介绍了Gradle的任务创建、执行周期、依赖关系管理及自定义任务的方法,并展示了如何利用Gradle进行构建自动化,包括任务扩展属性的使用、任务执行顺序控制以及构建过程中的生命周期钩子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * 创建任务
 */
task A{

    //后执行
    doLast{
        println 'last'
    }

    //先执行
    doFirst{
        println 'first'

    }
    doLast{
        println 'last1'
    }

    doFirst{
        println 'first1'
    }
}
A.doLast{

}

//局部变量
def aa = 'linyaokui'

/**
 * 扩展属性  扩展属性每一个类都有 扩展属性在其他类中都可以调用
 */
ext{
    prop1 = '11'
}
ext.prop2 = '22'

//给android模块 增加ext扩展属性
android.ext.prop5 = '55'

/**
 *创建一个构建任务 <<相当后doLast后执行
 */
task show << {
    println aa
    println prop1
    println prop2

    //调用当前项目中的ext
    println project.ext.prop2

    //调用基gradle 中的ext (自工程可以拿到基工程中的属性 包括gradle.properties中的属性)
    println rootProject.ext.props_main

    //调用show任务里的ext
    println ext.prop4

    //调用上面android任务先的ext
    println android.ext.prop5
}
show.ext.prop4 = '44'

/**
 * 任务执行周期
 */
task B{
    //在配置的时候执行
    println 'doing block'

    //执行阶段执行
    doLast{
        println 'last'
    }
}

/**
 * 任务执行顺序
 */
task C <<{
    println 'C'
}
task D <<{
    println 'D'
}
task OrderTask(dependsOn : [C,D]) <<{
    println 'OrderTask'
}
//依赖 执行A任务肯定会执行B任务
//C.dependsOn D
//当两个任务都执行时 A必须在B后面执行
//C.mustRunAfter D
//当两个任务都执行时 并行编译下 A不一定在B后面执行
//C.shouldRunAfter D
//执行完A后 会执行B 相当于java中的finally
C.finalizedBy D

/**
 * 自定义task
 */
class IncrementTask extends DefaultTask{

    //定义输入输出文件  可以进行增量构建 如果输入输出文件无变化 就不会执行构建方法
    @Input
    @Optional // 如果没有这个注解 当不写输入文件时  会报错,写了就表示这个文件是可选的
    String filePath //input 可以使n个文件 目录或者属性

    //输出文件
    @OutputFile
    @Optional
    File file

    IncrementTask(){
        //给任务分组
        group 'aagrou'
        //给任务添加描述
        description '任务描述'
        // 每次都必须执行 不跳过任务(不走增量构建模式)  true的话就可以跳过
        outputs.upToDateWhen {false}
    }

    //通过TaskAction注解 表示run方法会在任务执行时被调用
    @TaskAction
    void run(){
        println '自定义任务'
    }
}
//创建自定义任务 1
//tasks.create('increment',IncrementTask)
//创建自定义任务 2 创建一个IncrementTask任务的增强任务increment
task increment(type: IncrementTask){
    filePath = 'path/to/somefile1'
    file = file('path.txt')
}

/**
 * gradle自带很多任务  例如 Zip Delete等等
 * 下面是zip的使用
 */
//task zip(type: Zip){
//    archiveName 'my.zip' //压缩包名字
//    destinationDir file("${buildDir}/zip") //压缩文件输出目录
//    from "${buildDir}/generated" //压缩文件
//}

/**
 * 在分析完成gradle 之后执行该方法
 * 下面演示 在打包完成后将输出结果压缩
 */
afterEvaluate {
    task zip(type: Zip){
        archiveName 'my.zip' //压缩包名字
        destinationDir file("${buildDir}/zip") //压缩文件输出目录
        from "${buildDir}/outputs"
    }
    zip.dependsOn(tasks.getByName('assembleDebug'))
}

/**
 * gradle 构建顺序
 * 1、分析构建脚本 生成settings与project类
 * 2、进行初始化配置
 * 3、执行任务
 *
 * 对gradle构建生命周期 hook
 */
//在分析完成gradle 之后执行 在1和2之间执行
afterEvaluate {
}
//在1之前执行 对于引入了android插件的工程无效
beforeEvaluate {
}
//等同于上面两个方法
gradle.addProjectEvaluationListener(new ProjectEvaluationListener() {
    @Override
    void beforeEvaluate(Project project) {

    }

    @Override
    void afterEvaluate(Project project, ProjectState state) {

    }
})
//gradle 任务执行图
gradle.addListener(new TaskExecutionGraphListener(){

    @Override
    void graphPopulated(TaskExecutionGraph graph) {
        println graph.allTasks
    }
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值