Android BuildConfig中JSON字符串编译转义丢失问题求助
解决BuildConfig中JSON字符串转义失效的问题
这个问题我之前也碰到过,核心原因是Gradle(Groovy DSL)的字符串转义逻辑和Java不一样——你写的\"会被Groovy直接解析成普通的",导致最终生成的BuildConfig代码里没有正确的转义引号,直接触发Java语法错误。下面给你几个可行的解决方案:
方案1:手动添加双重转义
要让最终生成的Java代码里出现\",你需要在Gradle配置里写\\"。因为Groovy会先把\\解析成单个\,再保留后面的"转义,这样就能得到你想要的结果。
修改后的Gradle配置代码:
buildConfigField "String", "JSON", "\"{\\\"testkey1\\\": \\\"someValue1\\\",\\\"testkey2\\\": 3,\\\"testkey3\\\": {\\\"innerKey1\\\": \\\"innerValue1\\\",\\\"innerKey2\\\": \\\"innerValue2\\\"}}\""
编译后生成的BuildConfig代码就会是正确的形式:
public static final String JSON = "{\"testkey1\": \"someValue1\",\"testkey2\": 3,\"testkey3\": {\"innerKey1\": \"innerValue1\",\"innerKey2\": \"innerValue2\"}}";
方案2:用Groovy三重双引号简化操作
Groovy支持三重双引号(""")包裹的多行字符串,内部的双引号不需要额外转义,你可以直接写出带转义的结构,再用.trim()去掉多余的换行:
buildConfigField "String", "JSON", """ "{\"testkey1\": \"someValue1\",\"testkey2\": 3,\"testkey3\": {\"innerKey1\": \"innerValue1\",\"innerKey2\": \"innerValue2\"}}" """.trim()
方案3:从外部文件读取JSON(复杂场景首选)
如果你的JSON内容很长或者经常修改,手动转义太容易出错了。推荐把JSON放在单独的文件里(比如src/main/config/app_config.json),然后在Gradle里读取文件内容并自动处理转义:
def jsonContent = file('src/main/config/app_config.json').text.trim() buildConfigField "String", "JSON", "\"${jsonContent.replace('"', '\\"')}\""
这种方式既省心,后续修改JSON也不用动Gradle配置,维护起来更方便。
验证的话,编译项目后去app/build/generated/source/buildConfig/[你的包名]/BuildConfig.java里看看生成的代码,确认转义引号是否正确就可以了。
内容的提问来源于stack exchange,提问作者Emanuel
相关产品推荐
相关产品推荐

