You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gradle任务中获取当前构建的flavor名称?

Gradle任务获取当前构建Flavor的修复方案

问题原因

之前的实现无法拿到flavor,是因为gradle.getStartParameter().getTaskRequests().toString()打印的是DefaultTaskExecutionRequest对象自身的结构信息,而非实际传入的任务执行参数,需要主动调用getArgs()方法获取实际要执行的任务列表。同时原代码缺少显式返回值,也会导致获取到的flavor为空。

修复后的实现代码

首先修正getCurrentFlavor方法:

def getCurrentFlavor() {
    Gradle gradle = getGradle()
    // 正确获取所有任务请求的参数列表
    List<String> taskRequests = gradle.getStartParameter().getTaskRequests().collect { it.args }.flatten()
    String tskReqStr = taskRequests.join(" ")

    // 兼容assemble、generate、install三类常见任务前缀,可按需扩展
    Pattern pattern = Pattern.compile("(assemble|generate|install)(\\w+)(Release|Debug)")
    Matcher matcher = pattern.matcher(tskReqStr)

    if (matcher.find()) {
        return matcher.group(2).toLowerCase()
    } else {
        println "NO MATCH FOUND"
        // 可自定义默认返回值避免空指针
        return "default"
    }
}

调用注意事项

不要在任务的配置阶段直接调用getCurrentFlavor,Gradle配置阶段会优先解析所有任务配置,此时任务请求参数还未完全加载,需要放在任务的执行阶段逻辑中:

task getAssets(type: Copy) {
    // 配置阶段逻辑写此处(如复制的源路径、目标路径)
    from("src/main/assets/")
    into("build/intermediates/assets/")

    // 执行阶段逻辑用doFirst/doLast包裹,此时才能正确获取flavor
    doFirst {
        def currentFlavor = getCurrentFlavor()
        // 后续基于flavor的处理逻辑写此处
        println "当前构建flavor为:${currentFlavor}"
    }
}

内容的提问来源于stack exchange,提问作者matdev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 23:27:04