如何筛选和执行特定的 Gradle 任务?
How to filter and execute specific Gradle tasks?
我的 Android 项目配置了不同的产品风格:
productFlavors {
devtracking {
dimension trackingFlavorDimension
}
livetracking {
dimension trackingFlavorDimension
}
stagingwebservice {
dimension webserviceFlavorDimension
}
livewebservice {
dimension webserviceFlavorDimension
}
playstore {
dimension brandDimension
}
fdroid {
dimension brandDimension
}
}
我如何编写一个只构建 release
构建 devtracking
风格的任务? "filter" 已准备就绪 - 我如何才能真正执行过滤后的任务?请注意,现在 "filter" 已在配置时执行。
task assembleDevtrackingRelease {
description "Assembles all Devtracking release builds."
group = "Build"
android.applicationVariants.all { variant ->
if (variant.name.contains("DevtrackingRelease")) {
println(variant.name)
// TODO Execute this variant
}
}
}
task installDevtrackingReleaseFlavors() {
android.applicationVariants.all { v ->
if (v.name.endsWith('DevtrackingRelease')) {
String name = v.name.capitalize()
dependsOn "install$name"
}
}
}
在 Selvin 和 mirceanis 的大力帮助下,我终于想出了这个解决方案:
// Creates a parent task for a set of sub tasks.
// Sub tasks are collected based on the given task name part.
def createVariantBatchTask(taskNamePart, taskPrefix = "assemble", taskGroup = "Build") {
String taskName = "${taskPrefix}${taskNamePart.capitalize()}"
Task task = tasks.create(taskName)
task.description "${taskPrefix.capitalize()}s all $taskName builds."
task.group taskGroup
android.applicationVariants.all { variant ->
if (variant.name.toLowerCase().contains(taskNamePart.toLowerCase())) {
Task variantTask = tasks.findByName("${taskPrefix}${variant.name.capitalize()}")
if (variantTask != null) {
task.dependsOn variantTask
}
}
}
}
createVariantBatchTask("devtrackingRelease")
createVariantBatchTask("devtrackingDebug")
可能的改进:移至 buildSrc
中的自定义任务 class。
我的 Android 项目配置了不同的产品风格:
productFlavors {
devtracking {
dimension trackingFlavorDimension
}
livetracking {
dimension trackingFlavorDimension
}
stagingwebservice {
dimension webserviceFlavorDimension
}
livewebservice {
dimension webserviceFlavorDimension
}
playstore {
dimension brandDimension
}
fdroid {
dimension brandDimension
}
}
我如何编写一个只构建 release
构建 devtracking
风格的任务? "filter" 已准备就绪 - 我如何才能真正执行过滤后的任务?请注意,现在 "filter" 已在配置时执行。
task assembleDevtrackingRelease {
description "Assembles all Devtracking release builds."
group = "Build"
android.applicationVariants.all { variant ->
if (variant.name.contains("DevtrackingRelease")) {
println(variant.name)
// TODO Execute this variant
}
}
}
task installDevtrackingReleaseFlavors() {
android.applicationVariants.all { v ->
if (v.name.endsWith('DevtrackingRelease')) {
String name = v.name.capitalize()
dependsOn "install$name"
}
}
}
在 Selvin 和 mirceanis 的大力帮助下,我终于想出了这个解决方案:
// Creates a parent task for a set of sub tasks.
// Sub tasks are collected based on the given task name part.
def createVariantBatchTask(taskNamePart, taskPrefix = "assemble", taskGroup = "Build") {
String taskName = "${taskPrefix}${taskNamePart.capitalize()}"
Task task = tasks.create(taskName)
task.description "${taskPrefix.capitalize()}s all $taskName builds."
task.group taskGroup
android.applicationVariants.all { variant ->
if (variant.name.toLowerCase().contains(taskNamePart.toLowerCase())) {
Task variantTask = tasks.findByName("${taskPrefix}${variant.name.capitalize()}")
if (variantTask != null) {
task.dependsOn variantTask
}
}
}
}
createVariantBatchTask("devtrackingRelease")
createVariantBatchTask("devtrackingDebug")
可能的改进:移至 buildSrc
中的自定义任务 class。