版本冲突解决
在复杂的 Android 项目中 ,不同的库可能会依赖同一个库的不同版本,这就是所谓的依赖冲突。
默认版本解决策略
默认情况下,Gradle 会执行 “最高版本胜出” 策略。即如果同时有 1.0 和 2.0 版本,Gradle 会自动选择 2.0。
冲突发现与诊断
如果在运行项目时遇到 NoSuchMethodError 或 ClassCastException,通常就是依赖冲突导致的。
使用以下命令检查冲突:
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 来保持项目的依赖“健康”且精简。