依赖冲突与解决
在复杂的 Android 项目中,不同的库可能会依赖同一个库的不同版本,这就是所谓的依赖冲突。
1. Gradle 的默认解决策略
默认情况下,Gradle 会执行 “最高版本胜出” 策略。即如果同时有 1.0 和 2.0 版本,Gradle 会自动选择 2.0。
2. 如何发现冲突?
如果在运行项目时遇到 NoSuchMethodError 或 ClassCastException,通常就是依赖冲突导致的。
使用以下命令检查冲突:
bash
./gradlew :app:dependencies --configuration releaseRuntimeClasspath3. 强制指定版本 (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"))
}
}