如何解决由番石榴引起的错误:程序类型已存在:com.google.common.util.concurrent.internal.InternalFutures

时间:2018-10-25 00:24:52

标签: guava android-guava

一个AAR库已经使用com.google.guava。

如果某个应用的build.gradle中包含以下内容:

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

构建应用程序会产生以下错误:

Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
> com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: ...
  Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
  Program type already present: com.google.common.util.concurrent.internal.InternalFutures

如果我不包含“ api'com.google.guava:guava:27.0-android'”,则可以构建该应用程序,但在达到使用该应用程序时会出现java.lang.NoClassDefFoundError的运行时错误番石榴方法:Iterables.find

2 个答案:

答案 0 :(得分:8)

我不得不更新到27.0.1版本,在撰写本文时,他们还没有使用此新版本更新自述文件。

implementation 'com.google.guava:guava:27.0.1-android'

答案 1 :(得分:5)

Since Guava 27.0ListenableFuture位于单独的工件中,请参见the announcement。您可以尝试两种方法(一次尝试一种):

  1. 排除"listenablefuture"模块(组"com.google.guava")并重新构建项目。
  2. 我不知道AAR的具体细节,但可能是27.0-android与AAR不兼容,因此您应该尝试使用26.0-android