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

AGP 7.0.0及以上版本中variant.resValue的替代方案是什么

AGP 7 动态添加resValue适配方案

错误原因

你调用addResValue报错是因为该方法不是onVariants回调返回的Variant对象的直接成员,AGP 7.0+的新变体API调整了动态资源的注入入口。

两种适配方案

方案1:沿用旧API(AGP7全版本兼容)

旧版applicationVariantsAPI在AGP7中尚未被移除,原有逻辑可以直接运行,无需修改:

applicationVariants.all { variant ->
  // 自定义处理逻辑得到apiKeyValue
  variant.resValue "string", "api_key", apiKeyValue
}

方案2:使用新androidComponents API(官方推荐写法)

通过Variant对象的resValues集合添加资源值即可,通用写法如下:

androidComponents {
    onVariants(selector().all()) { variant ->
        // 自定义处理逻辑得到apiKeyValue
        resValues.put(
            "api_key",
            new com.android.build.api.variant.ResValue(
                "string",
                apiKeyValue,
                "Value from variant"
            )
        )
    }
}

如果是AGP 7.1及以上版本,也可以使用简化扩展方法,和你原有写法的区别是需要先调用resValues:

androidComponents {
    onVariants(selector().all()) { variant ->
        // 自定义处理逻辑得到apiKeyValue
        resValues.addResValue("api_key", "string", apiKeyValue, "Value from variant")
    }
}

注意事项

  • 动态添加的资源名不能和项目现有res/values下的同名资源冲突,否则会触发资源合并错误
  • 如果apiKeyValue包含引号、换行等特殊字符,需要提前做转义处理,避免资源编译失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:15:00