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

Android:将JSON作为Gradle参数传入并解析的正确方式

解决Gradle传入JSON作为BuildConfig参数的问题

问题根源

  1. 属性名不匹配:你的getJson()方法取的是getJson属性,但命令行传的是-Pjson,两者不一致。
  2. 字符串转义处理缺失:Java字符串要求内部双引号用\"转义,直接传入JSON会导致BuildConfig语法错误。
  3. 命令行shell的转义规则差异:不同系统的shell对引号、转义符的解析逻辑不同,导致传入的JSON被篡改。

正确实现步骤

1. 修正build.gradle中的属性获取

def getJson() {
    // 匹配命令行传入的-Pjson参数
    project.properties.get('json')
}

2. 正确生成BuildConfig字段

需要将JSON中的双引号转义为Java字符串支持的\",再包裹外层双引号:

buildConfigField "String", "MYDATA", "\"${getJson()?.replace('"', '\\"') ?: "{}"}\""
  • 用?.避免参数未传入时的空指针异常
  • 用?: "{}"设置默认空JSON,防止构建失败

3. 命令行传入JSON的正确方式

根据使用的shell选择对应写法:

  • Linux/macOS(bash/zsh):用单引号包裹JSON,避免shell解析内部引号
    ./gradlew assembleDebug -Pjson='{"key1": "value1", "key2": "value2"}'
    
  • Windows CMD:用双引号包裹JSON,内部双引号用\转义
    gradlew assembleDebug -Pjson="{\"key1\": \"value1\", \"key2\": \"value2\"}"
    
  • Windows PowerShell:同Linux/macOS,用单引号包裹即可
    ./gradlew assembleDebug -Pjson='{"key1": "value1", "key2": "value2"}'
    

验证结果

构建完成后,查看app/build/generated/source/buildConfig/[包名]/BuildConfig.java,会生成如下正确代码:

public static final String MYDATA = "{\"key1\": \"value1\", \"key2\": \"value2\"}";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:22:16