问题:

你想要在构建进程当中排除指定的任务。

解决方案:

可以使用-x排除单个任务。编辑task graph排除多个任务。

讨论:

Gradle的构建进程包含了许多任务的执行顺序。他们中的大多数都依赖于进程中之前执行的任务,但是也有些在时间紧张的时候也可以被排除。

举个例子,lint任务对判断你的项目和google推荐的APP实践有多少差距,但是没必要每次都执行。

在Gradle中使用-x标志(--exclude-task的缩写)排除一个任务。因此使用这个flag跳过lint任务(或者其它你不想要的任务),如下:

./gradlew build -x lint

这个排除了lint任务和所有依赖它的任务。任何需要它的任务也不会运行,所以确定拟派出的任务不会在后面的进程当中被需要。

唯一的问题是如果你的项目包含多个variants,每个任务都有一个lint任务。理论上你可以手动的排除,但是你更希望在build里面排除。

当Gradle运行的时候,集合了一个有向非循环图(DAG),task的图表。你可以通过gradle对象在build文件里面得到参考。任何对graph的修改都必须在它形成之后,所以你需要在应用任何改变之前使用whenReady属性。

结果就是如可以像下面这样在build文件里面写代码:

gradle.taskGraph.whenReady { graph ->
graph.allTasks.findAll { it.name ==~ /lint.*/ }*.enabled = false
}

task graph的allTasks属性使用Groovy风格引用getAllTasks方法。这个返回tasks的java.util.List。Groovy在List里面增加了一个findAll方法,可以只返回满足提供的闭包的任务。在这种情况下,闭包表示遍历所有任务的name属性,并且坚持他们是否符合正则表达式。使用“spread-dot”操作符将列表中的所有任务无效。

结果就是所有以小写letters开头的任务,它们的enabled属性都置false,所有它们都不会执行。

有时候你不想排除所有lint任务,你可以在这么做之前检查项目属性是否被设置:

gradle.taskGraph.whenReady { graph ->
if (project.hasProperty('noLint')) {
graph.allTasks.findAll { it.name ==~ /lint.*/ }*.enabled = false
}
}

你可以在命令行使用-P设置project属性,如下:

这个涉及到大量的Groovy只是,但是在修改task graph是非常强大的。

Android开发:《Gradle Recipes for Android》阅读笔记(翻译)4.3——排除任务的更多相关文章

  1. Android开发工具全面转向Android Studio(3)——AS project/module的目录结构(与Eclipse对比)

    如果AS完全还没摸懂的,建议先看下Android开发工具全面转向Android Studio(2)——AS project/module的CRUD. 注:以下以Windows平台为标准,AS以目前最新 ...

  2. Android开发工具全面转向Android Studio(2)——AS project/module的CRUD

    本文有些地方可能需要衔接Android开发工具全面转向Android Studio(1)——准备开发环境,读起来效果会更好. 这个世界很奇妙,所有的东西离不开CRUD,即增删改查.即使人本身也遵循这个 ...

  3. 配置cordova的android开发环境(无android studio)

    原文:配置cordova的android开发环境(无android studio) 趁元旦放假想试一下cordova,不想安装庞大的android studio,所以想最小化安装,居然花了一整天的时间 ...

  4. 收集整理Android开发所需的Android SDK、开发中用到的工具、Android开发教程、Android设计规范,免费的设计素材等。

    AndroidDevTools Android Dev Tools官网地址:www.androiddevtools.cn 收集整理Android开发所需的Android SDK.开发中用到的工具.An ...

  5. Eclipse搭建Android开发环境并运行Android项目

    Eclipse搭建Android开发环境并运行Android项目 (详细) 安装环境: window 10 64位 安装工具: JDK.Eclipse.SDK.ADT 安装步骤: 1.JAVA JDK ...

  6. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)6.2——DSL文档

    问题: 你需要查找Android Gradle DSL的完整文档. 解决方案: 访问Gradle Tools网站,从Android开发网站下载ZIP文件. 讨论:Android开发网站首页有完整的AP ...

  7. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.1——单元测试

    问题: 你想要测试app中的非android部分. 解决方案: 可以使用Android Studio1.1里面增加的单元测支持和Android的Gradle插件. 讨论: ADT插件只支持集成测试,并 ...

  8. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.3——用Eclipse ADT导出App

    问题: 想在一个已经存在的Eclipse ADT的项目中使用Gradle 解决方案: Eclipse ADT插件可以帮助生成Gradle文件 讨论: Eclipse的ADT插件是在2013年推出Gra ...

  9. Android开发:《Gradle Recipes for Android》阅读笔记1.2

    在android开发中会需要配置使用app的android SDK的最低版本和目标版本,这个是bulidl.gradle的android模块设置.默认有以下几个设置: applicationId,这个 ...

随机推荐

  1. 用nodepad++生成导入数据的SQL

    在工作中经常要往数据库里导入数据,如果是在本地,可以用SQL SERVER自带的工具 直接往表里导入或者 用ssis 导入 线上的数据库由dba负责,作为开发不能直接操作,需要程序员来生成sql语句, ...

  2. css盒子模型及属性介绍(margin,padding)

    每个HTML元素都可以看作装了东西的盒子 盒子具有宽度(width)和高度(height) 盒子里面的内容到盒子的边框之间的距离即填充(margin) 盒子本身有边框(border) 而盒子边框外和其 ...

  3. Xcode中利用git源代码版本号控制

    git是一个版本号控制系统,能够通过命令行来调用,也有专门的桌面软件.这里主要介绍在Xcode中怎样利用git来进行版本号的控制. 一.创建git源 从Xcode5開始引入了使用git的一些新特性.将 ...

  4. Shell 基础笔记

    1-22-shell脚本的基础 本节所讲内容:      shell 基本语法      变量 第1章 什么是SHELL?.. 2 1.1 shell编程.. 3 第2章 shell变量及运用.. ...

  5. Exif.js获取图片的详细信息(苹果手机移动端上传图片旋转90度)

    Exif.js插件介绍 http://code.ciaoca.com/javascript/exif-js/ iOS手机竖着拍的照片经过前端处理之后被旋转了90°的原因以及解决方案 https://w ...

  6. Atitit.数据操作dsl 的设计 ---linq 方案

    Atitit.数据操作dsl 的设计 ---linq 方案 1.1. sql与api方式1 1.2. Linq方案与stream方案的选择,1 1.3. 前缀表达式 vs 中缀表达式1 1.4. 要不 ...

  7. Atitit.  单列索引与多列索引 多个条件的查询原理与设计实现

    Atitit.  单列索引与多列索引 多个条件的查询原理与设计实现 1. MySQL只能使用一个索引1 1.1. 最左前缀1 1.2. 从另一方面理解,它相当于我们创建了(firstname,last ...

  8. atitit.提升兼容性最佳实践 p825.doc

    atitit.提升兼容性最佳实践 p825.doc 1. Atitit.兼容性的“一加三”策略1 2. 扩展表模式2 3. 同时运行模式2 3.1. 完美的后向兼容性3 3.2. 虚拟机模式3 3.3 ...

  9. 强大的Vivado IP工具——自定义IP的使用

    首先,要指出,本文不描述任何IP的功能与使用.   在开发一个大型FPGA项目时,多人协作是必不可少的.这个时候,如何提交设计给负责集成的人,是项目开发中最关键的问题之一. 常用的一个方法是,提交网表 ...

  10. [svc]rsyslog及logrotate小结

    [root@node1 logrotate.d]# ls dracut haproxy httpd mcelog nginx ppp psacct syslog yum yum install ngi ...