如何从gradle任务中获取风味名称 [英] How to get flavor name from within gradle task
问题描述
我有以下gradle设置:
I have the following gradle setup:
apply plugin: 'com.android.application'
def projectName
android {
...
flavorDimensions "project"
productFlavors {
demo {
dimension "project"
}
full {
dimension "project"
}
}
...
applicationVariants.all { variant ->
variant.outputs.all {
projectName = variant.flavorName
}
}
}
...
task myTask(type: Copy) {
println "flavor name is $projectName"
...
}
preBuild.dependsOn myTask
但是,println
在我的命令行/终端中没有显示风味名称.我想念什么吗?我以此为参考:如何在gradle中获得当前风味 .请注意,我必须在prebuild
之前运行我的任务.
However, the println
does not show the flavor name in my command line/terminal. Am I missing something? I used this as a reference: How to get current flavor in gradle. Please take note that I have to run my task before the prebuild
.
推荐答案
这就是解决我的问题的方法.
This is what solved my issue.
apply plugin: 'com.android.application'
def projectName
android {
...
flavorDimensions "project"
productFlavors {
demo {
dimension "project"
}
full {
dimension "project"
}
}
...
}
...
//
// This function is what I added (from @Jeel Vankhede answer)
//
task getCurrentFlavor() {
Gradle gradle = getGradle()
String tskReqStr = gradle.getStartParameter().getTaskRequests().toString()
Pattern pattern
if (tskReqStr.contains("assemble"))
pattern = Pattern.compile("assemble(\\w+)(Release|Debug)")
else
pattern = Pattern.compile("generate(\\w+)(Release|Debug)")
Matcher matcher = pattern.matcher(tskReqStr)
if (matcher.find()) {
projectName = matcher.group(1).toLowerCase() // Changing to 2 will return build type, 1 provides product flavor
} else {
println "NO MATCH FOUND"
}
}
task myTask(type: Copy) {
dependsOn getCurrentFlavor
println "flavor name is $projectName"
...
}
preBuild.dependsOn myTask
基本上,我通过dependsOn getCurrentFlavor
添加了Jeel Vankhede的答案(如我的gradle文件中所述).这样,我们可以确保在实际在myTask
任务中使用变量之前先填充projectName
变量.
Basically, I added Jeel Vankhede's answer (as noted in the my gradle file) via dependsOn getCurrentFlavor
. This way, we are sure that the projectName
variable gets populated first before actually using it in myTask
task.
这篇关于如何从gradle任务中获取风味名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!