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

如何在build.gradle中从JSON配置文件动态创建productFlavors?

嘿,这个需求我之前刚好折腾过,完全能实现!通过Gradle读取外部JSON配置来动态生成productFlavors,再也不用每次增删学校都改build.gradle文件了,下面给你一步步拆解怎么做:

步骤1:创建JSON配置文件

首先在项目根目录(或者你可以单独建个configs/文件夹来放)创建你的flavor配置文件,比如命名为flavors_config.json,内容就用你给的示例:

[ {"name": "school1"}, {"name": "school2"} ]

要是后续需要更灵活的配置(比如自定义applicationId、应用名称),还可以扩展字段,比如:

[
    {"name": "school1", "applicationId": "com.your.app.school1", "appName": "第一中学"},
    {"name": "school2", "applicationId": "com.your.app.school2", "appName": "第二中学"}
]
步骤2:在build.gradle中读取JSON并生成Flavors

打开app模块的build.gradle文件,先写一个读取JSON的工具方法,再动态生成productFlavors:

首先添加读取JSON的方法:

// 读取外部flavor配置文件的方法
def getFlavorsFromJson() {
    // 这里的路径根据你实际的JSON文件位置调整,示例是项目根目录下的文件
    def configFile = file("../flavors_config.json")
    if (!configFile.exists()) {
        throw new GradleException("Flavor配置文件找不到!请检查路径:${configFile.absolutePath}")
    }
    // 用Groovy的JsonSlurper解析JSON
    def jsonSlurper = new groovy.json.JsonSlurper()
    return jsonSlurper.parse(configFile)
}

然后在android闭包里动态生成productFlavors:

android {
    // ...你的compileSdk、defaultConfig等基础配置

    // 动态创建productFlavors
    productFlavors {
        getFlavorsFromJson().each { flavorConfig ->
            def flavorName = flavorConfig.name
            // 用字符串插值的方式创建flavor
            "${flavorName}" {
                // 设置applicationId:如果JSON里有配置就用配置的,没有就用默认规则拼接
                applicationId flavorConfig.applicationId ?: "com.your.app.${flavorName}"
                // 设置应用名称:同样支持自定义或默认值
                resValue "string", "app_name", flavorConfig.appName ?: "${flavorName}校园版"
                // 要是需要其他配置,比如versionName后缀,也可以在这里加
                // versionNameSuffix "-${flavorName}"
            }
        }
    }

    // ...你的buildTypes等其他配置
}
步骤3:把JSON文件加入版本控制

因为你希望build.gradle保持稳定不变,记得把flavors_config.json加入版本控制(比如Git),这样团队成员都能共享配置,以后增删学校只需要修改这个JSON文件,同步后Gradle会自动生成对应的flavor。

一些注意事项
  • 一定要保证JSON格式正确,比如括号、逗号要配对,不然Gradle同步会直接报错。
  • 如果JSON文件的位置变了,要同步修改getFlavorsFromJson()里的文件路径。
  • 运行Gradle同步后,就能在Android Studio的Build Variants面板里看到所有动态生成的flavor了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:13:05