You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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.rootDirproject.projectDir来定位,避免相对路径出错。
  • 不要在构建脚本中读取打包后的assets文件:因为assets是在构建后期才打包的,Gradle配置阶段读取不到,建议把需要解析的JSON放在项目根目录或单独的配置文件夹中。
  • 旧方法失效的原因:很多第三方Gradle插件或旧的依赖在新版Android Gradle插件(AGP)中被移除或不再兼容,所以用语言原生的解析工具是最稳妥的选择。

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

火山引擎 最新活动