在添加第一个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
我知道达格试图使用番石榴,尽管它不应该——但我不知道该怎么做才能解决这个问题。这不是一个前卫的问题。
我试图将番石榴包含在我的依赖项中,这在编译时出现了下一个错误:
Error: Program type already present: com.google.common.util.concurrent.internal.InternalFutures
这是有道理的,因为我的代码中还有其他依赖于guava的库。
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
在看到Dagger依赖于com.google.guava:guava:23.3-jre
之后,我尝试在Gradle构建文件中添加下一行:
api 'com.google.guava:guava:23.3-android'
它起作用了!
不再使用"compile"一词。在依赖项中使用"实现"。我不知道这是否是问题的原因,但也许吧。