美文网首页
Gradle 任务 -- 任务的 onlyIf 断言

Gradle 任务 -- 任务的 onlyIf 断言

作者: 冯可乐同学 | 来源:发表于2022-01-02 09:13 被阅读0次

----《Android Gradle 权威指南》学习笔记

总目录:Gradle 学习系列 -- 目录

上一篇:Gradle 任务 -- 任务的弃用和禁用

下一篇:Gradle 任务 -- 任务规则

  1. 断言就是一个条件表达式。 Task 有一个 onlyIf 方法,它接受一个闭包作为参数,如果该闭包返回 true 则该任务执行,否则跳过。

  2. 这种方式有很多用途,比如控制程序哪些情况下打什么包,什么时候执行单元测试,什么情况下执行单元测试但不需要测试网络等。

  3. 举个栗子,假如项目的首发渠道是应用宝和百度,直接执行 build 会编译出所有包,这样会太慢也不符合要求,就可以采用 onlyIf 的方式通过属性来控制。在 build.gradle 中有以下代码:

final String BUILD_APP_ALL = "all";
final String BUILD_APP_SHOUFA = "shoufa";
final String BUILD_APP_EXCLUDE_SHOUFA = "exclude_shoufa";

task taskQQRelease{
    doLast{
        println "打包 QQ 应用应用市场的包"
    }
}

task taskBaiduRelease{
    doLast{
        println "打包百度应用市场的包"
    }
}

task taskHuaWeiRelease{
    doLast{
        println "打包华为应用市场的包"
    }
}

task taskMiuiRelease{
    doLast{
        println "打包 MIUI 应用市场的包"
    }
}

task build{
    group BasePlugin.BUILD_GROUP
    description "打渠道包"
}


build dependsOn taskQQRelease, taskBaiduRelease, taskHuaWeiRelease, taskMiuiRelease

taskQQRelease.onlyIf {
    def execute = false;
    if(project.hasProperty("build_apps")){
        Object buildApps = project.property("build_apps")
        if(BUILD_APP_ALL.equals(buildApps)){
            execute = true
        }else{
            execute = false
        }
    }else{
        execute = false
    }
    execute
}

taskBaiduRelease.onlyIf {
    def execute = false;
    if(project.hasProperty("build_apps")){
        Object buildApps = project.property("build_apps")
        if(BUILD_APP_SHOUFA.equals(buildApps) || BUILD_APP_ALL.equals(buildApps)){
            execute = true
        }else{
            execute = false
        }
    }else{
        execute = false
    }
    execute
}

taskHuaWeiRelease.onlyIf{
    def execute = false;
    if(project.hasProperty("build_apps")){
        Object buildApps = project.property("build_apps")
        if(BUILD_APP_SHOUFA.equals(buildApps) || BUILD_APP_ALL.equals(buildApps)){
            execute = true
        }else{
            execute = false
        }
    }else{
        execute = false
    }
    execute
}

taskMiuiRelease.onlyIf{
    def execute = false;
    if(project.hasProperty("build_apps")){
        Object buildApps = project.property("build_apps")
        if(BUILD_APP_EXCLUDE_SHOUFA.equals(buildApps) || BUILD_APP_ALL.equals(buildApps)){
            execute = true
        }else{
            execute = false
        }
    }else{
        execute = false
    }
    execute
}

(1) 在命令行中执行命令:gradle build,没有任何打印结果。

(2) 在命令行中执行命令:gradle build -Pbuild_apps=all
打印结果:

> Task :taskBaiduRelease
打包百度应用市场的包

> Task :taskHuaWeiRelease
打包华为应用市场的包

> Task :taskMiuiRelease
打包 MIUI 应用市场的包

> Task :taskQQRelease
打包 QQ 应用应用市场的包

(3) 在命令行中执行命令:gradle build -Pbuild_apps=shoufa
打印结果:

> Task :taskBaiduRelease
打包百度应用市场的包

> Task :taskHuaWeiRelease
打包华为应用市场的包

(4) 在命令行中执行命令:gradle build -Pbuild_apps=exclude_shoufa
打印结果:

> Task :taskMiuiRelease
打包 MIUI 应用市场的包

说明:命令行中 -P 是为 Project 指定 K-V 格式的键值对,使用格式为: -PK=V。

从打印结果可以看出,通过设置不同的参数就可以控制打包的渠道。

相关代码:https://gitee.com/fzq.com/gradle-demos

相关文章

  • Gradle 任务 -- 任务的 onlyIf 断言

    ----《Android Gradle 权威指南》学习笔记 总目录:Gradle 学习系列 -- 目录[https...

  • Hello Gradle 任务

    多种方式创建任务 多种方式访问任务 任务分组和描述 任务排序 任务的启用和禁用 任务的onlyIf断言 断言就是一...

  • Gradle 任务 -- 任务规则

    ----《Android Gradle 权威指南》学习笔记 总目录:Gradle 学习系列 -- 目录[https...

  • Gradle 任务 -- 任务排序

    ----《Android Gradle 权威指南》学习笔记 总目录:Gradle 学习系列 -- 目录[https...

  • 【Gradle】Gradle任务

    个人博客:http://www.milovetingting.cn Gradle任务 多种方式创建任务 1、直接以...

  • Gradle任务

    1.多种方式创建任务: 第一种:直接以一个任务名字创建任务的方式 def Task ex6=task(ex6) e...

  • Gradle 任务 -- 任务的执行分析

    ----《Android Gradle 权威指南》学习笔记 总目录:Gradle 学习系列 -- 目录[https...

  • Android 代码检查自动化

    检查工具:Lint,FindBugs任务配置:jenKins任务配置gradle gradle配置 配置gradl...

  • Gradle命令

    1、Gradle 查询命令 1)、查看主要任务 2)、查看所有任务,包括缓存任务等等 2、Gradle 执行命令 ...

  • gradle任务笔记

    执行gradle --quiet hello greeting结果 结论 一个是修改了,一个是没修改,执行会默认...

网友评论

      本文标题:Gradle 任务 -- 任务的 onlyIf 断言

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