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

Android Gradle构建时如何动态读取对应flavor的versions.properties文件

实现动态读取对应flavor的version.properties文件方案

核心思路是通过Gradle提供的flavor/variant对象获取当前构建的flavor名称,自动拼接路径,完全不需要硬编码flavor名。

方案1:在productFlavors配置阶段读取(适合提前注入BuildConfig/资源的场景)

直接遍历所有已定义的flavor,自动匹配对应目录的配置文件:

android {
    flavorDimensions "default"
    productFlavors {
        // 定义你的三个flavor
        flavourOne {}
        flavourTwo {}
        flavourThree {}

        // 通用处理逻辑,新增flavor无需修改此处
        all { currentFlavor ->
            def versionFile = file("${project.projectDir}/src/${currentFlavor.name}/version.properties")
            // 增加文件存在判断避免构建报错
            if (versionFile.exists()) {
                def properties = new Properties()
                properties.load(new FileInputStream(versionFile))
                // 示例:将配置写入BuildConfig,代码中可直接读取
                buildConfigField "String", "VERSION_NAME", "\"${properties.getProperty("version_name")}\""
                buildConfigField "int", "VERSION_CODE", "${properties.getProperty("version_code")}"
                // 也可以写入res资源、manifest占位符等,按需调整
            }
        }
    }
}

方案2:在构建Variant阶段读取(适合动态修改构建属性的场景)

如果需要修改variant的构建参数(比如动态改versionName/versionCode),可以监听applicationVariants回调处理:

android {
    // 你的原有配置...
    flavorDimensions "default"
    productFlavors {
        flavourOne {}
        flavourTwo {}
        flavourThree {}
    }
}

// 遍历所有构建变体,动态读取对应flavor的配置
android.applicationVariants.all { variant ->
    def currentFlavorName = variant.flavorName
    def versionFile = file("${project.projectDir}/src/${currentFlavorName}/version.properties")
    if (versionFile.exists()) {
        def properties = new Properties()
        properties.load(new FileInputStream(versionFile))
        // 示例:动态修改当前变体的版本号
        variant.mergedFlavor.versionName = properties.getProperty("version_name")
        variant.mergedFlavor.versionCode = properties.getProperty("version_code") as int
    }
}

注意事项

  • 两种方案都支持后续新增flavor,只要在对应src/[flavor名]目录下放入version.properties即可,不需要修改逻辑代码
  • 如果你使用了多flavor维度,可通过variant.productFlavors获取所有维度的flavor名称,按需拼接路径即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:54:07