带有Dagger 2的番石榴ImmutableMap的NoClassDefFoundError for Android

时间:2018-11-13 13:31:25

标签: android guava dagger-2 noclassdeffounderror

添加第一个Dagger模块后启动我的Android应用程序时,我将发生下一次崩溃。

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/common/collect/ImmutableMap;
    at com.sofaking.moonworshipper.DaggerAppComponent.getMapOfClassOfAndProviderOfFactoryOf(DaggerAppComponent.java:35)
    at com.sofaking.moonworshipper.DaggerAppComponent.getDispatchingAndroidInjectorOfActivity(DaggerAppComponent.java:41)
    at com.sofaking.moonworshipper.DaggerAppComponent.injectApp(DaggerAppComponent.java:64)
    at com.sofaking.moonworshipper.DaggerAppComponent.inject(DaggerAppComponent.java:59)
    at com.sofaking.moonworshipper.DaggerAppComponent.inject(DaggerAppComponent.java:16)

问题似乎与GitHub上的问题相同: https://github.com/google/dagger/issues/897

我知道Dagger尝试使用番石榴,尽管它不应该这样做-但是我不确定该怎么做。这不是维护问题。

我尝试在我的依赖项中加入番石榴-编译时出现下一个错误:

Error: Program type already present: com.google.common.util.concurrent.internal.InternalFutures

这很有意义,因为我的代码中还有其他依赖于番石榴的库。

implementation 'com.google.dagger:dagger:2.15'
kapt 'com.google.dagger:dagger-compiler:2.15'

compile 'com.google.dagger:dagger-android:2.15'
compile 'com.google.dagger:dagger-android-support:2.15'
kapt 'com.google.dagger:dagger-android-processor:2.15'

// tried adding this as well, didn't work
api 'com.google.guava:guava:27.0-android'

编辑:这是已解决的依赖关系树:https://pastebin.com/RsPPjD6H

2 个答案:

答案 0 :(得分:1)

看到Dagger依赖于com.google.guava:guava:23.3-jre之后,我尝试在Gradle构建文件中添加下一行:

api 'com.google.guava:guava:23.3-android'

它有效!

答案 1 :(得分:0)

“ compile”一词已不再使用。在您的依赖项中使用“实现”。我不知道这是否是导致问题的原因,但也许是这样。