无法执行dex:多个dex文件定义了Lbolts/AggregateException

18

我知道多个dex问题之前已经被报告了很多次,但在我的情况下似乎没有任何解决方案可行。

控制台:

    Unable to execute dex: Multiple dex files define Lbolts/AggregateException;
    Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lbolts/AggregateException;

其中一种流行的解决方案是取消构建路径中“Android私有库”容器的勾选。我无法这样做,因为该容器中还有我需要的几个其他库。

另一个解决方案是取消标记任何以.jar形式明确添加的重复库。我没有这样的库。

在我的情况下,重复的库是:android-support-v7-appcompat.jar。我在以下这两个容器中都拥有它(直接从sdk文件夹引用):

1.) Android私有库

2.) Android 依赖项

问题在于,我不能完全取消勾选这两个容器中的任何一个,因为它们都包含其他必要的库。但我也无法仅从任一容器中删除此重复的 .jar 文件。

编辑: 注意:当我将 android-support-v7-appcompat library_project 添加到我的项目中时,它将进入两个容器。必须有某种方法使其只进入一个。

是否有人能帮助我如何做到这一点?

screenshot

screenshot2 (unable to delete)


请检查您的任何依赖项是否已经包含android-support-v7-appcompat.jar。此外,您可以在屏幕截图左侧的树形视图中看到两个android-support-v7元素。 - Quentin S.
我已经意识到了。问题是,我无法从容器中删除重复的JAR文件。我唯一得到的选择是删除整个容器(Android依赖项或Android私有库)。如果您的意思是让我从dexedLibs文件夹中删除其中一个,那么这并没有帮助。下次编译它们仍会重新出现。它们是可执行字节码。 - Abdul Wasae
1
但我也无法仅从任一容器中删除这个重复的.jar文件。为什么会这样? 您尝试过从两个容器中都删除它,然后将其作为单独的库添加在它们外面吗? - Quentin S.
我只是无法从任何容器中删除它(或两者):( 让我尝试并发布屏幕截图或者也许我不知道正确的方法。在构建路径窗口中,当我选择一个jar文件时,按钮变灰 - Abdul Wasae
@chteuchteu,请查看我在帖子中添加的另一张截图。此外,在“构建路径”窗口中,选项被禁用。 - Abdul Wasae
4个回答

23

已解决

bolts-android库是真正的问题所在。由于存在两个不同版本,导致冲突。 FacebookSDK库引入了bolts-android-1.1.2,而android-support-v7-appcompat引入了bolts-android-1.1.4

我在FacebookSDK库项目中取消了Android私有库容器的标记,该容器包含了bolts-android-1.1.2。结果,我的项目现在只有一个版本的bolts-android-1.1.4,解决了冲突。现在运行良好。

此外,事实证明,重复的android-support-v7-appcompat条目并不是个问题。


是的,我发现版本不匹配非常可疑,但是你所说的“取消标记”是什么意思?你是指从构建路径中删除吗? - reubenjohn
是的。但你知道吗...每次我打开Eclipse都必须取消标记它。:/ 我还没有找到解决办法 :/ 我认为这是一个Eclipse的bug或者什么的。 - Abdul Wasae
2
从主项目中删除bolts-android和android-support库对我有用。 :) - vinesh
但是在我的情况下,我想知道为什么每次打开Eclipse时它都会再次出现;我不得不再次删除它。我每次都必须删除一个bolt-android库 :( - Abdul Wasae
1
从我的gradle.build中移除了插件,现在已经修复。 - eggie5

7
我最近在我的React Native项目中遇到了这个问题,你可以进入项目的android文件夹,并在终端中输入"./gradlew app:dependencies"命令以查看依赖树。我发现了Facebook SDK下的两个Android Bolts包。如果你从Facebook SDK中排除这个包,那么问题就会再次得到解决。
compile ('com.facebook.react:react-native:+') {
   exclude group: 'com.parse.bolts', module: 'bolts-tasks'
}

1
谢谢Hasan,我的问题也一样,但是使用了一些不同的包。似乎react-native在'react-native-firebase-analytics'和'react-native-fcm'上使用了一些不同的依赖版本,这种差异导致我的项目dexDebug失败。同时,使用一些'dexOptions',比如'preDexLibraries'非常有帮助,可以找到哪个包有重复的版本。可能更好的解决方案是将这些包的版本更改为与gradle运行匹配的版本,而不是在主应用程序build.gradle中排除某些包。 - Amin Mousavi

3

在将Facebook SDK添加到Android时,可能会出现这种情况,您可以通过以下方法解决:

compile ("com.facebook.android:facebook-android-sdk:4.1.0") {
    exclude group: 'com.parse.bolts', module: 'bolts-android'
}

1
随着React版本的更新至0.31.0,当您想要集成具有com.parse.bolts的com.facebook.fresco:animated-gif:0.10.0时,您可以按照以下方式操作:
 compile ('com.facebook.react:react-native:+') {
    exclude group: 'com.parse.bolts', module: 'bolts-tasks'
}
compile ('com.facebook.fresco:animated-gif:0.10.0'){
    exclude group: 'com.parse.bolts', module: 'bolts-tasks'
}

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