Android的Gradle技巧 4.3排除任务

32 篇文章 0 订阅
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.allTask​​s.findAll {it.name ==〜/lint.*/} *。enabled = false
}}
任务图的allTask​​s属性使用正常的Groovy习语调用getAllTask​​s方法。返回一个任务的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知识,但是在任务图组装后操作任务图的想法是非常强大的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值