【问题标题】:NoClassDefFoundError for Guava's ImmutableMap with Dagger 2 for AndroidNoClassDefFoundError for Guava 的 ImmutableMap with Dagger 2 for Android
【发布时间】:2018-11-15 04:37:50
【问题描述】:

我在添加第一个 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 正在尝试使用 Guava,虽然它不应该 - 但我不确定如何解决这个问题。这不是 proguard 问题。

我试图在我的依赖项中包含番石榴 - 编译时出现下一个错误:

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

【问题讨论】:

  • 你有一个使用compileOnlyprovided的依赖吗?
  • 没有provided 依赖,只有一个compileOnly 依赖。这应该是个问题吗?
  • 你能发布一个解决依赖关系的树吗?另外,请注意since Guava 27.0 there's a separate artifact for ListenableFuture
  • @Xaerxess 我刚刚做了。可以的话请看一下。

标签: android guava dagger-2 noclassdeffounderror


【解决方案1】:

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

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

而且它有效!

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 刚刚试过。没有帮助。用implementation 替换所有compile - 除了compileOnly,这似乎是更新的。
    猜你喜欢
    • 2012-03-18
    • 2014-03-22
    • 2016-11-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多