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
相关产品推荐
相关产品推荐

