Skip to content

依赖冲突与解决

在复杂的 Android 项目中,不同的库可能会依赖同一个库的不同版本,这就是所谓的依赖冲突

1. Gradle 的默认解决策略

默认情况下,Gradle 会执行 “最高版本胜出” 策略。即如果同时有 1.0 和 2.0 版本,Gradle 会自动选择 2.0。

2. 如何发现冲突?

如果在运行项目时遇到 NoSuchMethodErrorClassCastException,通常就是依赖冲突导致的。

使用以下命令检查冲突:

bash
./gradlew :app:dependencies --configuration releaseRuntimeClasspath

3. 强制指定版本 (ResolutionStrategy)

如果你想打破默认策略,强制全项目使用特定版本:

kotlin
configurations.all {
    resolutionStrategy {
        // 强制使用这个版本,即使其他库依赖了更高版本
        force("androidx.core:core-ktx:1.9.0")
        
        // 遇到冲突时直接报错,而不是默默选择最高版
        // failOnVersionConflict()
    }
}

4. 替换依赖

有时一个库改名了(例如从 support-v4 变为 androidx),你可以全局替换它:

kotlin
configurations.all {
    resolutionStrategy.dependencySubstitution {
        substitute(module("com.old.group:old-name"))
            .using(module("com.new.group:new-name:1.0.0"))
    }
}