使用ant或Eclipse进行编译时出现多个dex文件错误

我无法构build我的应用程序我正在运行最新的构build工具今天下载,更新后开始发生。

-dex: [dex] Converting compiled files and external libraries into /Users/rob/Repos/my_app/bin/classes.dex... [dx] [dx] UNEXPECTED TOP-LEVEL EXCEPTION: [dx] com.android.dx.util.DexException: Multiple dex files define Lcom/robaldred/myapp/About$1; 

我已经尝试清理和重build,我也尝试在Eclipse中,但它给出了同样的错误。 任何人有任何想法? 我现在在这里的一堵砖墙上。

Solutions Collecting From Web of "使用ant或Eclipse进行编译时出现多个dex文件错误"

昨天发生了一些事情,我的系统(和另一个在这里工作)SDK想推平台工具更新,但我根本无法使用它,等等。

我最终将SDK移开并重新安装,然后就像以前一样工作。 我没有你的dex的具体问题,但我怀疑推动昨天的更新打破了很多东西。 祝你好运。

我花了几个小时清理,创build新项目,卸载 – 重新安装sdk …没有任何工作。 我没有任何库项目(我只是有一些在lib下的jar文件)。 最后,我修好了,我的脚步是:

  • search和清理所有.apk文件(我有一些在.svn文件夹… grr ..一些开发人员已经添加了一些build设相关的文件夹下svn)
  • 删除bin和gen。
  • 从eclipse项目属性中删除对库jar的引用,按ok。 然后再把它们添加回来。 我有一些java编译jar库。 我不知道为什么我必须删除并添加它,但肯定是需要的。

您可以:

  • 删除文件夹<.settings><bin><gen>和文件<.classpath><.project><project.properties>

  • 在Eclipse中删除您的项目(右键, <Delete> ),而不删除源文件。

  • 创build一个新的Android项目,并从以前的源中select<Create project from existing sources>

  • 导入外部库,如果需要在构buildpath中。

它应该解决这个烦人的问题。

要小心你的项目中附加的所有源文件。 我在两种情况下发现了这个问题:

  1. 当我有两个不同的android支持库jar子
  2. 当我不小心把过去的一些Facebook的src不作为库,而是直接放到我的src目录下

所以所有说你不应该把你的bin /目录放到类path中的答案也是正确的,但是在出现如下错误的情况下:

 [2013-08-02 20:22:03 - Dex Loader] Unable to execute dex: Multiple dex files define Lcom/facebook/android/AsyncFacebookRunner$1; [2013-08-02 20:22:03 - Activity] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcom/facebook/android/AsyncFacebookRunner$1; 

你应该在项目/库(在大多数情况下应该由Android Eclipse环境创build)中寻找相同的jar,或者查看附加到项目的所有源以findcom.facebook.android.AsyncFacebookRunner类的多个发生(如上面的示例代码) com.facebook.android.AsyncFacebookRunner

我认为在bin目录改变

 com/XXX/XXX 

 classes/com/XXX. 

你可以清理你的项目并解决它。

我看到了同样的问题。 如果您使用的是Android Studio,则需要确保在编译时没有包含在任何项目中的“bin”或“gen”文件夹。

删除后,我能够成功编译

如果您因多个DEX文件而遇到问题

删除整个目标文件夹并重新生成项目。 这不会影响您的项目,因为目标文件夹中的所有内容都会重新生成。

在您的应用程序gradle.build>依赖关系中将实现文件树(包括:['. jar'],dir:'libs')更改为提供的fileTree(include:['. jar'],dir:'libs')。

确保它已经在你的模块设置>依赖项{include = [* jar] dir = libs}中进行了更改。 它必须在其旁边提供一个范围,而不是实现。