升级AndroidX与Firebase后出现Dagger及javax.inject类重复冲突
解决Dagger与javax.inject依赖冲突问题
这种依赖冲突在升级AndroidX和第三方库时特别常见,我来帮你一步步排查和修复:
问题本质
你没直接使用Dagger,但项目里的第三方库(比如com.google.android.gms:play-services-cast-framework:17.1.0)引入了Dagger 2.22,同时还有另一个未找到的依赖来源引入了旧版Dagger 1.2.2;另外javax.inject也存在重复依赖,导致checkDebugDuplicateClasses步骤检测到重复类,构建失败。
具体解决方案
1. 精准定位Dagger 1.2.2的来源
先执行更细致的依赖树命令,找出到底是哪个库带了旧版Dagger:
./gradlew app:dependencies --configuration debugCompileClasspath | grep -A 5 -B 5 dagger-1.2.2
如果上述命令没结果,就导出完整依赖树到文件搜索:
./gradlew app:dependencies > dependencies.txt
打开dependencies.txt,直接搜索dagger-1.2.2,就能找到对应的依赖库。
2. 排除冲突的依赖
找到引入Dagger 1.2.2的库后,在Module级别的build.gradle中给该库添加排除规则,同时统一处理javax.inject的重复:
// 假设是第三方库xxx:yyy:zzz引入了Dagger 1.2.2 implementation('xxx:yyy:zzz') { // 排除旧版Dagger exclude group: 'com.squareup.dagger', module: 'dagger' // 重复的javax.inject也一并排除 exclude group: 'javax.inject', module: 'javax.inject' } // 给play-services-cast-framework也加上javax.inject排除 implementation('com.google.android.gms:play-services-cast-framework:17.1.0') { exclude group: 'javax.inject', module: 'javax.inject' }
3. 强制统一依赖版本(可选但推荐)
为了彻底杜绝这类冲突,可以在Project级别的build.gradle的allprojects块里强制指定Dagger和javax.inject的版本:
allprojects { repositories { // 你的仓库配置(比如google()、mavenCentral()等) } configurations.all { resolutionStrategy { // 强制所有依赖使用Dagger 2.22 force 'com.google.dagger:dagger:2.22' // 强制所有依赖使用统一的javax.inject版本 force 'javax.inject:javax.inject:1' } } }
4. 验证修复效果
先检查依赖是否已经统一:
./gradlew app:dependencies | grep dagger ./gradlew app:dependencies | grep javax.inject
确认所有Dagger都是2.22版本、javax.inject都是1版本后,重新构建项目:
./gradlew app:clean app:assembleDebug
内容的提问来源于stack exchange,提问作者Anton
相关产品推荐
相关产品推荐

