【问题标题】:How can I compile an Android project using Dagger 2 and DataBinding如何使用 Dagger 2 和 DataBinding 编译 Android 项目
【发布时间】: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


    【解决方案1】:

    似乎我把事情复杂化了。仅升级 apt guava 依赖项解决了该问题。我的最终配置是:

    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"
    apt 'com.google.guava:guava:22.0'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-13
      • 2011-09-22
      • 2011-12-16
      • 1970-01-01
      • 2018-04-07
      • 2022-11-19
      • 2018-01-04
      • 2022-01-06
      相关资源
      最近更新 更多