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

Android Studio多维度Product Flavor分Build Type配置源码集问题

解决多维度Product Flavor下按Build Type关联子集文件夹的问题

当使用2个及以上维度的Product Flavor时,ADT/Gradle默认不支持通过Flavor子集(如appleRed)来覆盖配置。举个例子:定义了apple/orange(水果维度)、red/green/yellow(颜色维度)、bad/good(版本维度)三个Flavor维度后,默认只能创建apple、orange、appleRedBad这类完整组合的资源/Java文件夹,无法直接使用appleRed这类子集文件夹,必须复制文件到所有完整组合文件夹中,操作冗余。

此前的方案可以实现普通子集文件夹的配置,但无法区分Build Type(Debug/Release),如果直接添加variant.buildType.name,会把appleYellowDebug这类文件夹同时关联到Debug和Release构建中。以下是能实现仅为指定Build Type添加对应子集文件夹的通用配置:

android {
    // 其他配置...
    applicationVariants.all { variant ->
        def flavorNames = variant.productFlavors*.name
        def buildTypeName = variant.buildType.name
        def fullVariantName = variant.name

        // 生成所有可能的Flavor子集组合(包含Build Type的情况)
        def flavorCombinations = []
        // 生成不带Build Type的子集(如appleRed)
        for (int i = 0; i < flavorNames.size(); i++) {
            def combo = flavorNames.take(i + 1).join('')
            flavorCombinations.add(combo)
        }
        // 生成带Build Type的子集(如appleRedDebug)
        flavorCombinations.addAll(flavorCombinations.collect { it + buildTypeName.capitalize() })

        // 为每个子集组合关联对应的源码和资源目录,仅当目录存在时添加
        flavorCombinations.each { combo ->
            def srcDir = "src/$combo/java"
            def resDir = "src/$combo/res"
            if (file(srcDir).exists()) {
                android.sourceSets."$fullVariantName".java.srcDirs += srcDir
            }
            if (file(resDir).exists()) {
                android.sourceSets."$fullVariantName".res.srcDirs += resDir
            }
        }
    }
}

代码说明

  • 核心信息获取:提取当前变体的Flavor名称列表、Build Type名称,以及完整变体名称(如appleRedBadDebug);
  • 子集组合生成:先生成所有不带Build Type的Flavor层级子集(3个维度下会生成apple、appleRed、appleRedBad),再基于这些子集生成带Build Type的版本(如appleDebug、appleRedDebug);
  • 存在性校验关联:仅当对应的源码/资源文件夹实际存在时,才将其添加到当前变体的目录集合中,避免无效配置。

配置完成后,你可以直接创建appleRedDebug、orangeGreenRelease这类仅对应特定Build Type的子集文件夹,Gradle会自动将其关联到对应的变体构建中,无需逐个手动配置。

内容的提问来源于stack exchange,提问作者José Gómez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 23:02:19