Skip to content

版本冲突解决

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

默认版本解决策略

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

冲突发现与诊断

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

使用以下命令检查冲突:

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

强制指定版本 (ResolutionStrategy)

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

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

依赖模块替换

有时一个库改名了(例如从 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"))
    }
}

依赖优化与清理 (Dependency Analysis)

项目运行久了,往往会引入大量“无用”的依赖,拖慢编译速度。推荐使用 [Dependency Analysis Gradle Plugin]。

它可以自动分析并报告:

  • 未使用但声明了的依赖:建议删除以提速。
  • 使用了但未显式声明的依赖:建议显式声明以增强稳定性(避免依赖库升级后移除导致崩掉)。
  • 应该使用 implementation 却错误使用了 api 的依赖

工具推荐

定期运行 ./gradlew buildHealth 来保持项目的依赖“健康”且精简。