如何从gradle任务中获取风味名称 [英] How to get flavor name from within gradle task

查看:412
本文介绍了如何从gradle任务中获取风味名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆