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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:21:00