使用Gradle Kotlin DSL管理BuildConfig字段遇类型转换错误求助
解决Gradle中buildConfigField遍历报错及格式问题
错误原因
- 类型识别错误:
project.extra["vars"]返回的是Any类型,直接遍历会导致Gradle无法正确识别其为Map集合,误将其当作Pair处理,抛出类型转换异常。 - 字符串格式错误:原代码中
buildConfigField的第三个参数是带转义双引号的字符串(如"\"1\""),遍历时代码直接使用${entry.value}会丢失外层双引号,导致生成的BuildConfig代码语法错误。
修复后的代码
config.gradle.kts(保持不变)
val vars = mapOf( "VAR_1" to "1", "VAR_2" to "2", //... "VAR_10" to "10", ) project.extra.set("vars", vars)
主build.gradle.kts修改
apply(from = "config.gradle.kts") android { defaultConfig { // 显式转换为Map类型,解决类型识别问题 val vars = project.extra["vars"] as Map<String, String> vars.forEach { (key, value) -> // 为字符串值添加转义双引号,符合buildConfigField的要求 buildConfigField("String", key, "\"$value\"") } } }
关键说明
- 显式类型转换:通过
as Map<String, String>将project.extra中的值转换为明确的Map类型,让Gradle能正确识别集合类型并遍历Entry。 - 字符串转义:使用
"\"$value\""确保生成的BuildConfig字段值是带双引号的字符串,符合Java语法规范。
内容的提问来源于stack exchange,提问作者dzboot02
相关产品推荐
相关产品推荐

