JSON

Android的Gradle技巧 4.3排除任务

字号+ 作者:H5之家 来源:H5之家 2017-07-06 08:02 我要评论( )

4.3排除任务问题您希望从构建过程中排除某些任务。解使用-x标志排除单个任务。通过修改任务图排除多个任务。讨论Gradle构建过程涉及许多按顺序执行的任务。它们

4.3排除任务
问题
您希望从构建过程中排除某些任务。

使用-x标志排除单个任务。通过修改任务图排除多个任务。
讨论
Gradle构建过程涉及许多按顺序执行的任务。它们中的大多数依赖于在过程中较早执行的任务,但是如果时间是关键的,则有一些可以被排除。
例如,lint任务对于确定您的项目遵守Google针对Android应用程序的推荐做法的程度非常有用,但不一定每次都要运行它。
回想一下Gradle中的-x标志(--exclude-task的缩写)排除了给定的任务。因此,运行构建时,使用标志跳过lint任务(或任何其他不需要的任务),如例4-11所示。
实例4-11。排除lint任务
> ./gradlew build -x lint
这排除了lint任务及其任何依赖关系。任何需要其结果的任务都不会运行,因此请确保在过程中不需要排除任何任务。
唯一的问题是,如果你的项目涉及多个变体,每个都有一个lint任务。原则上,您可以手动排除它们,但您可能更喜欢将整个集合作为构建的一部分。
当Gradle运行时,它组装一个有向无环图,称为任务图。你可以通过gradle对象在你的构建文件中得到它的引用。对图形的任何操作都需要在形成之后进行,因此,在应用任何更改之前,您需要使用whenReady属性。
结果是你可以在构建文件中编写代码,如例4-12所示。
实例4-12。禁用以lint开头的所有任务
gradle.taskGraph.whenReady {graph - >
graph.allTasks.findAll {it.name ==/lint.*/} *。enabled = false
}}
任务图的allTasks属性使用正常的Groovy习语调用getAllTasks方法。返回一个任务的java.util.List。 Groovy向List添加了一个findAll方法,该方法仅返回满足提供的闭包的任务。
在这种情况下,闭包说访问每个任务的name属性,并检查它是否与正则表达式完全匹配。将“spread-dot”运算符应用于结果列表将禁用列表中的每个任务。
结果是所有名称以字母lint开头的任务都将其enabled属性设置为false,因此它们都不会运行。
由于您可能不希望始终排除所有lint任务,因此可以在执行此操作之前检查项目属性是否已设置,如例4-13所示。
实例4-13。如果设置了noLint属性,则仅禁用lint任务
gradle.taskGraph.whenReady { graph -> if (project.hasProperty('noLint')) { graph.allTasks.findAll { it.name ==~ /lint.*/ }*.enabled = false } }您可以使用-P标志从命令行设置项目属性,如例4-14所示。
实例4-14。设置项目属性
> ./gradlew build -PnoLint | grep lint :app:lintVitalArrogantRelease SKIPPED :app:lintVitalFriendlyRelease SKIPPED :app:lintVitalObsequiousRelease SKIPPED :app:lint SKIPPED
显然,在这种方法中涉及了大量的Groovy知识,但是在任务图组装后操作任务图的想法是非常强大的。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • ubuntu移植jsoncpp到Android平台

    ubuntu移植jsoncpp到Android平台

    2017-07-04 18:00

  • 提高关键词排名的28个SEO技巧

    提高关键词排名的28个SEO技巧

    2017-07-04 14:04

  • Android 解析JSON数据格式

    Android 解析JSON数据格式

    2017-06-26 18:04

  • Golang 中使用 JSON 的一些小技巧

    Golang 中使用 JSON 的一些小技巧

    2017-06-22 15:03

网友点评
"