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

5

一个 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'”,那么应用程序可以构建,但是当它到达使用Guava方法Iterables.find的点时,它会发生java.lang.NoClassDefFoundError的运行时错误。
2个回答

10

我不得不更新到27.0.1版本,目前为止,他们还没有在README中更新这个新版本。

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

5

自Guava 27.0版本起,ListenableFuture被移到了单独的构件中,请参见公告。您可以尝试以下两种方法(一次只尝试一种):

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

1
谢谢!该库是我们自己的库,使用了 api 'com.google.guava:guava:27.0-android'。问题出现在我从23.5-android升级到27.0-android时。如果我在应用程序中使用23.5-android(库仍使用27.0-android),则应用程序将正常工作。根据你的答案,应用程序中以下内容也可以正常工作:compile('com.google.guava:guava:27.0-android'){ exclude group: "com.google.guava" }。这很奇怪,因为我认为上述代码本质上排除了整个Guava软件包。 - Hong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接