如何在Android Gradle文件中解析JSON文件?现有方法不兼容新版谷歌Maven
在Android Gradle中解析JSON文件的可行方案
当然有办法解决这个问题!针对新版Android Gradle(配合谷歌Maven最新版本),我整理了几个稳定可靠的实现方式,避开那些已经不被支持的旧方法:
方法1:用Groovy原生的JsonSlurper(适用于Groovy DSL)
Gradle本身基于Groovy,JsonSlurper是Groovy自带的JSON解析工具,不需要额外引入依赖,兼容性拉满。比如你要读取项目根目录下的config.json文件:
// 在Module级别的build.gradle中 def jsonFile = file("$project.rootDir/config.json") def jsonSlurper = new groovy.json.JsonSlurper() def configData = jsonSlurper.parse(jsonFile) // 示例:获取JSON中的某个字段 def appVersionName = configData.version.name println "从JSON读取的版本名:$appVersionName" // 可以把这个值用到构建配置中 android { defaultConfig { versionName appVersionName } }
如果你的JSON文件在src/main/assets目录下,要注意Gradle构建时的路径处理,建议直接用项目绝对路径或者相对路径定位,避免assets目录的打包影响。
方法2:用Kotlin内置Json解析(适用于Kotlin DSL)
如果你的项目用的是Kotlin DSL(build.gradle.kts),可以直接用Kotlin标准库的Json类来解析,同样不需要额外依赖:
// 在Module级别的build.gradle.kts中 import kotlinx.serialization.json.Json import kotlinx.serialization.Serializable // 先定义对应JSON结构的数据类(如果需要强类型解析) @Serializable data class AppConfig( val version: VersionInfo ) @Serializable data class VersionInfo( val name: String, val code: Int ) // 读取并解析JSON文件 val jsonContent = file("$project.rootDir/config.json").readText() val configData = Json.decodeFromString<AppConfig>(jsonContent) // 应用到构建配置 android { defaultConfig { versionName = configData.version.name versionCode = configData.version.code } }
如果不想用强类型,也可以用Json.parseToJsonElement()来做动态解析,灵活获取字段值。
注意事项
- 确保JSON文件的路径正确:用
file()方法时,尽量基于project.rootDir或project.projectDir来定位,避免相对路径出错。 - 不要在构建脚本中读取打包后的assets文件:因为assets是在构建后期才打包的,Gradle配置阶段读取不到,建议把需要解析的JSON放在项目根目录或单独的配置文件夹中。
- 旧方法失效的原因:很多第三方Gradle插件或旧的依赖在新版Android Gradle插件(AGP)中被移除或不再兼容,所以用语言原生的解析工具是最稳妥的选择。
内容的提问来源于stack exchange,提问作者user9187




