美文网首页
不得不学之「 Gradle」 ④ Gradle 任务

不得不学之「 Gradle」 ④ Gradle 任务

作者: 猪_队友 | 来源:发表于2019-05-27 11:29 被阅读0次

    一、多种创建方式任务

    这个那么多,其实我们平时用的最多还是闭包的形式。记得太多容易混,别的看到能分别出来这个是创建就可以了。

    二、多种方式访问任务

    task 和 tasks
    tasks 其实就是一个数组,根据 task 的名字可以查到。没啥意思。就是方便。用到在深究。
    tasks['task1']

    三、分组和描述符

    group 分类 分组都可以
    description 描述符

    四、<<

    << 相当于 doLast (说实话我一用这个就报错 真的不知道咋回事)

    五、执行顺序

    doFirst -> doSelf -> doLast
    taskB.shouldRunAfter(taskA) 只是应该,可能也没有
    taskB.MustRunAfter(taskA) 这个就必须了

    六、任务的启用和禁用

    taskA.enabled = true
    taskA.enabled = false

    七、断言

    如果我们首发的渠道是应用宝和百度,直接执行 build 会编译出来所有的包,这个太慢了,所以就可以用这个断言 onlyIf 。

    final String BUILD_APPS_ALL = 'all'
    final String BUILD_APPS_SHOUFA = 'shoufa'
    final String BUILD_APPS_EXCLUDE_SHOUFA = 'exclude_shoufa'
    
    
    
    task exBaiduRelease  {
        doLast{
        println '打包百度'
    }
    }
    task exHuaWeiRelease  {
        doLast{
        println '打包华为'
    }
    }
    
    task exMeizuRelease  {
        doLast{
        println '打包魅族'
    }
    }
    
    
    task exMiRelease {
        doLast{
        println '打包小米'
    }
    }
    
    exMeizuRelease.mustRunAfter exMiRelease
    task build2{
        group BasePlugin.BUILD_GROUP
        description '大渠道包'
        println description
    }
    
    build2.dependsOn exBaiduRelease,exHuaWeiRelease,exMeizuRelease,exMiRelease
    
    exBaiduRelease.onlyIf{
        def execute = false
        if(project.hasProperty('build_apps')){
            Object buildAppps = project.property('build_apps')
            if(buildAppps.equals(BUILD_APPS_SHOUFA)||buildAppps.equals(BUILD_APPS_ALL)){
    execute = true
            }
        }
        execute
    }
    
    exHuaWeiRelease.onlyIf{
        def execute = false
        if(project.hasProperty('build_apps')){
            Object buildAppps = project.property('build_apps')
            if(buildAppps.equals(BUILD_APPS_SHOUFA)||buildAppps.equals(BUILD_APPS_ALL)){
    execute = true
            }
        }
        execute
    }
    exMeizuRelease.onlyIf{
        def execute = false
        if(project.hasProperty('build_apps')){
            Object buildAppps = project.property('build_apps')
            if(buildAppps.equals(BUILD_APPS_EXCLUDE_SHOUFA)||buildAppps.equals(BUILD_APPS_ALL)){
    execute = true
            }
        }
        execute
    }
    exMiRelease.onlyIf{
        def execute = false
        if(project.hasProperty('build_apps')){
            Object buildAppps = project.property('build_apps')
            if(buildAppps.equals(BUILD_APPS_EXCLUDE_SHOUFA)||buildAppps.equals(BUILD_APPS_ALL)){
    execute = true
            }
        }
        execute
    }
    
    image

    八、任务规则

    我们创建的任务都是在 TaskContainer 里的,所有我们访问任务的时候都是通过 TaskContainer 进行访问。TaskContainer 又是一个 NamedDomainObjectCollection(继承它),也就是 NamedDomainObjectCollection 的规则。NamedDomainObjectCollection 是一个具有唯一不变名字的域对象的集合。它里面的所有元素都有一个唯一不变的名字,String 类型的。我们可以通过名字来获取元素。也就是可以通过任务名来获取任务。至于怎么加规则,我们简单写一下。等以后要用的时候再深究。

    tasks.addRule('增加规则,这是规则描述'){ String taskName ->
        task(taskName){
            doLast{
    println "该 task ${taskName} 不存在 "
            }
        }
    }
    
    ask exBaiduRelease  {
        dependsOn exYingYongBao
        doLast{
        println '打包百度'
    }
    
    }
    
    exBaiduRelease.mustRunAfter exYingyongBao
    
    image

    最后说个事情,我的 << 符号还是不能用,难道是版本的问题?还是别的不清楚,慢慢解决吧。

    划重点: 本文是完全参考 《Android Gradle 权威指南》而写,作为学习笔记使用。

    相关文章

      网友评论

          本文标题:不得不学之「 Gradle」 ④ Gradle 任务

          本文链接:https://www.haomeiwen.com/subject/lmictctx.html