如何使用Dagger 2和DataBinding

时间:2017-06-20 13:01:31

标签: android gradle data-binding dagger-2

我正在尝试使用数据绑定和Dagger 2(版本2.11以及新的Android注入功能)。如果我从我的项目中取出数据绑定,那么我的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),如果我在我的app build.gradle中明确列出了这个依赖关系: / p>

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;)

有人能为此建议解决方案吗?

1 个答案:

答案 0 :(得分:1)

似乎我比较复杂的事情。仅升级apt番石榴依赖性解决了这个问题。我的最终配置是:

{{1}}