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

升级Gradle后Product Flavors依赖解析失败问题求助

解决新版Android Gradle Plugin下的变体依赖解析问题

这个问题的核心是Android Gradle Plugin(AGP)3.0+引入了变体感知的依赖管理机制,替代了旧版中手动指定configuration和publishNonDefault true的方式。旧版的配置逻辑在新版AGP中不再适用,导致无法找到对应的library变体。

问题根源

在AGP 3.0之前,我们需要手动声明配置并指定依赖的library变体;但3.0+之后,AGP会自动根据flavor维度+名称匹配来关联app和library的变体。你的app模块flavor名称是app1521/app1524,而library模块是sdk1521/sdk1524,名称不匹配且未配置fallback规则,所以Gradle无法定位到对应的依赖变体。

解决方案

我们只需要调整flavor的匹配规则,同时移除旧版的冗余配置,具体步骤如下:


1. 清理旧版冗余配置

  • 移除publishNonDefault true:AGP 3.0+默认会发布所有library变体,这个参数已废弃。
  • 删除configurations块:新版AGP会自动生成变体对应的配置,无需手动声明。
  • 删除依赖中的configuration参数:不再需要手动指定依赖的变体。

2. 配置Flavor匹配规则

有两种可选方案,选其一即可:

方案A:统一App和Library的Flavor名称(推荐)

将app模块的flavor名称改成和library一致,让AGP自动匹配变体:

app/build.gradle 修改后:

apply plugin: 'com.android.application'
android {
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "xyz.sahildave.flavoredlibrary"
        versionCode 1
        versionName "1.0"
        minSdkVersion 21
        targetSdkVersion 28
        compileSdkVersion 28
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    flavorDimensions("main")
    productFlavors {
        // 改为与library一致的flavor名称
        sdk1521 {
            dimension "main"
            applicationId "xyz.sahildave.flavoredlibrary.app1521"
        }
        sdk1524 {
            dimension "main"
            applicationId "xyz.sahildave.flavoredlibrary.app1524"
        }
    }
}
dependencies {
    // AGP自动匹配对应变体,无需手动指定configuration
    sdk1521Implementation project(':mylibrary')
    sdk1524Implementation project(':mylibrary')
    sdk1521Implementation 'com.android.support:appcompat-v7:21.0.3'
    sdk1524Implementation 'com.android.support:appcompat-v7:24.2.0'
}

mylibrary/build.gradle 修改后:

apply plugin: 'com.android.library'
android {
    buildToolsVersion "29.0.2"
    // 移除已废弃的publishNonDefault true
    defaultConfig {
        versionCode 1
        versionName "1.0"
        minSdkVersion 21
        targetSdkVersion 28
        compileSdkVersion 28
    }
    flavorDimensions("main")
    productFlavors {
        sdk1521 {
            dimension "main"
        }
        sdk1524 {
            dimension "main"
        }
    }
}
dependencies {
    sdk1524Implementation 'com.android.support:appcompat-v7:24.2.1'
    sdk1521Implementation 'com.android.support:appcompat-v7:21.0.3'
}
方案B:使用matchingFallbacks指定匹配规则(保留原App Flavor名称)

如果不想修改app的flavor名称,可以在app的每个flavor中配置matchingFallbacks,明确指定对应的library flavor:

app/build.gradle 修改后(仅展示核心修改部分):

flavorDimensions("main")
productFlavors {
    app1521 {
        dimension "main"
        applicationId "xyz.sahildave.flavoredlibrary.app1521"
        // 指定匹配library的sdk1521变体
        matchingFallbacks = ['sdk1521']
    }
    app1524 {
        dimension "main"
        applicationId "xyz.sahildave.flavoredlibrary.app1524"
        // 指定匹配library的sdk1524变体
        matchingFallbacks = ['sdk1524']
    }
}
dependencies {
    // AGP通过matchingFallbacks自动匹配对应变体
    implementation project(':mylibrary')
    app1521Implementation 'com.android.support:appcompat-v7:21.0.3'
    app1524Implementation 'com.android.support:appcompat-v7:24.2.0'
}

library模块的修改与方案A一致(仅需移除publishNonDefault true)。


额外建议

  • 考虑迁移到AndroidX:support库已停止维护,AndroidX是官方推荐的替代方案,可通过Android Studio的Refactor > Migrate to AndroidX工具自动完成迁移。
  • 统一compileSdkVersion和依赖版本:当前compileSdkVersion为28,但依赖的support库版本为21和24,建议使用与compileSdkVersion匹配的依赖版本(如28.0.0),避免潜在兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:48:14