【发布时间】:2017-11-23 01:01:35
【问题描述】:
我正在尝试使用数据绑定和 Dagger 2(具有新的 Android 注入功能的 2.11 版)。如果我从我的项目中取出数据绑定,那么我的 Dagger 2 设置工作正常。如果我取出 Dagger 2,那么我的数据绑定设置就可以正常工作。
我的匕首依赖如下:
compile "com.google.dagger:dagger-android-support:2.11"
apt "com.google.dagger:dagger-compiler:2.11"
apt "com.google.dagger:dagger-android-processor:2.11"
当我尝试构建时,在编译任务期间出现以下错误:
> java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState(ZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
看起来问题与 Guava 依赖项有关(Dagger 2 编译器和处理器都依赖于 com.google.guava:guava:21.0),如果我在我的应用程序 build.gradle 中明确列出此依赖项:
compile 'com.google.guava:guava:21.0'
...那么项目现在将编译。但似乎 guava 21 是使用 Java 8 编译的,现在尝试运行应用程序时出现以下错误:
Error:Error converting bytecode to dex:
Cause: Dex cannot parse version 52 byte code.
This is caused by library dependencies that have been compiled using Java 8 or above.
现在有一个 android 兼容版本的番石榴:
compile 'com.google.guava:guava:22.0-android'
但是如果我将它添加到我的依赖项中,那么 Dagger 2 代码生成将不再起作用:
java.lang.NoSuchMethodError: com.google.common.collect.SetMultimap.forEach(Ljava/util/function/BiConsumer;)
有人能提出解决方案吗?
【问题讨论】:
标签: android gradle data-binding dagger-2