Android 如何筛选和执行特定的Gradle任务?
我的Android项目配置了不同的产品风格:Android 如何筛选和执行特定的Gradle任务?,android,gradle,gradle-task,Android,Gradle,Gradle Task,我的Android项目配置了不同的产品风格: productFlavors { devtracking { dimension trackingFlavorDimension } livetracking { dimension trackingFlavorDimension } stagingwebservice { dimension webserviceFlavorDimension }
productFlavors {
devtracking {
dimension trackingFlavorDimension
}
livetracking {
dimension trackingFlavorDimension
}
stagingwebservice {
dimension webserviceFlavorDimension
}
livewebservice {
dimension webserviceFlavorDimension
}
playstore {
dimension brandDimension
}
fdroid {
dimension brandDimension
}
}
如何编写只为devtracking
flavor构建release
build的任务?“过滤器”准备就绪-我如何实际执行过滤后的任务?注意,现在“过滤器”已经在配置时执行
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
}
}
}
在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
中的自定义任务类中我不想要install
任务。我不想在调用/gradlew tasks
时自动运行它。这看起来是一个不错的方法。。。将安装更改为组装,则此任务应运行所有assemblexxxxxxdevtrackingrelease
任务。。。这个答案看起来像是[Gradle Recipes for Android code]的副本(没有更改您的要求我不明白:哪一行执行变量特定的任务?此外,电子书声明我需要添加一个doLast
块来执行命令。
// 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")