Gradle升级至3版本后Build variant列表无法区分productFlavors
首先,你的核心问题是错误地将两个环境Flavor分配到了不同的Flavor Dimension(维度)。Gradle 3.0+引入的Flavor Dimension机制,会将不同维度下的Flavor进行组合生成变体,而不是单独展示每个Flavor。当你给每个Flavor单独设置一个维度时,Gradle会尝试组合这些维度,导致你无法看到独立的Flavor选项。
正确的配置修改方案
你需要把所有环境相关的Flavor归到同一个维度下,具体步骤如下:
修改Flavor Dimensions定义
只保留一个维度(比如命名为environment,你也可以用自己习惯的名称),替换原来的两个维度:flavorDimensions "environment"调整Product Flavors的维度分配
让两个Flavor都归属到同一个维度:productFlavors { forteLocal { dimension "environment" // 统一到同一个维度 buildConfigField 'String' , 'API_URL', '"http://210.19.134.14:8080/"' buildConfigField 'String' , 'LOGIN', '"zen"' buildConfigField 'String' , 'PASS', '"Jksdsd12!!"' } forteProd { dimension "environment" // 统一到同一个维度 buildConfigField 'String' , 'API_URL', '"http://210.19.134.14:80802/"' buildConfigField 'String' , 'LOGIN', '""' buildConfigField 'String' , 'PASS', '""' // 补充你未写完的配置 } }同步Gradle并查看Build Variants
修改完成后,点击Android Studio右上角的Sync Project with Gradle Files按钮,等待同步完成。此时你应该能在Build Variants面板中看到forteLocalDebug、forteLocalRelease、forteProdDebug、forteProdRelease这些独立的变体选项了。
补充说明
如果你的项目确实需要多维度的Flavor(比如同时区分环境和渠道),那你需要在每个维度下定义对应的Flavor,比如:
flavorDimensions "environment", "channel" productFlavors { // 环境维度的Flavor dev { dimension "environment" // ... 相关配置 } prod { dimension "environment" // ... 相关配置 } // 渠道维度的Flavor googlePlay { dimension "channel" // ... 相关配置 } huawei { dimension "channel" // ... 相关配置 } }
这种情况下,Gradle会生成devGooglePlayDebug、devHuaweiRelease等组合变体,这是符合多维度设计预期的。
内容的提问来源于stack exchange,提问作者Elaman Aitymbet

