为什么我会得到重复的条目:com / google / common / base / FinalizableReference.class?

时间:2015-06-29 20:56:35

标签: android android-studio android-gradle android-multidex

当我将Microsoft Azure移动服务SDK添加到我的项目时:

compile 'com.microsoft.azure:azure-mobile-services-android-sdk:2.0.2'

我收到此错误:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:packageAllDebugClassesForMultiDex'.
> java.util.zip.ZipException: duplicate entry: com/google/common/base/FinalizableReference.class

可能是什么原因以及如何解决这个问题? 我猜我可以为Gradle制定一些排除规则,但这看起来怎么样?

2 个答案:

答案 0 :(得分:4)

运行任务dependencies,我们可以看到azure-mobile-services-android-sdk包含两个依赖项。

\--- com.microsoft.azure:azure-mobile-services-android-sdk:2.0.2
     +--- com.google.code.gson:gson:2.3
     \--- com.google.guava:guava:18.0

报告为重复的类来自Guava。如果你没有直接使用它,可能是另一个依赖使用它(可能与另一个版本)。可能的解决方法是将Guava排除在依赖项之外。

compile('com.microsoft.azure:azure-mobile-services-android-sdk:2.0.2') {
    exclude module: 'guava'
}

修改

回答你的评论,在你的项目中运行dependencies任务,并尝试找到另一个使用guava作为依赖项的库(可能是番石榴的旧版本)。

(in your project root folder)
$ cd app
(if you are running on OSX or Linux)
$ ../gradlew dependencies
(if you are running on Windows)
$ ../gradlew.bat dependencies

当您计算出依赖关系guava时,请按照与之前使用azure相同的方式将其排除。

答案 1 :(得分:1)

它;因为你有两个包含相同java类的库。命令gradle dependencies应该告诉你它是什么。

您可以选择如何排除依赖关系:

dependencies {

 compile('com.microsoft.azure:azure-mobile-services-android-sdk:2.0.2') {


   exclude module: 'cglib' //by artifact name

   exclude group: 'org.jmock' //by group

   exclude group: 'com.unwanted', module: 'someLib' //by both name and group

 }

}