Android:将JSON作为Gradle参数传入并解析的正确方式
解决Gradle传入JSON作为BuildConfig参数的问题
问题根源
- 属性名不匹配:你的
getJson()方法取的是getJson属性,但命令行传的是-Pjson,两者不一致。 - 字符串转义处理缺失:Java字符串要求内部双引号用
\"转义,直接传入JSON会导致BuildConfig语法错误。 - 命令行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
相关产品推荐
相关产品推荐

