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

时间:2011-10-21 18:05:35

标签: android ant dex

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

-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;

我已经尝试过清理和重建,我也尝试过Eclipse,但它也会出现同样的错误。 有人有任何想法吗?我现在在这里砖墙。

8 个答案:

答案 0 :(得分:9)

我花了几个小时清理,创建新项目,卸载 - 重新安装sdk ......没有用。我也没有任何库项目(我只是在lib下有一些jar文件)。 Howerver,最后我修复了它,我的步骤是:

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

答案 1 :(得分:5)

昨天发生了一些事情发生在我的系统(以及另一个工作中),SDK希望推动平台工具更新,但后来我根本无法使用它等等。

我最终将我的SDK移开并重新安装,然后一切都按原样运行。我没有你的dex特定问题,但我怀疑昨天的更新推送打破了很多东西。祝你好运。

答案 2 :(得分:3)

你可以:

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

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

  • 创建一个新的Android项目,然后从之前的来源中选择<Create project from existing sources>

  • 如果需要,可以在构建路径中导入外部库。

应该解决这个恼人的问题。

答案 3 :(得分:2)

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

  1. 当我有两个不同的android支持库jar
  2. 当我意外地把过去的一些Facebook src作为一个库,而不是直接进入我的src目录
  3. 因此,所有答案都说你不应该把你的bin /目录放到类路径中也是正确的,但是在你遇到错误的情况下:

    [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;
    

    你应该在项目/库中寻找相同的jar(在大多数情况下,这应该由Android Eclipse环境创建)或者查看附加到项目的所有源代码以查找类{{的上述示例代码)的多次出现({ 1}}

答案 4 :(得分:0)

我认为bin中的目录从

更改
com/XXX/XXX

classes/com/XXX.

您可以清理项目并解决它。

答案 5 :(得分:0)

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

删除后,我能够成功编译

答案 6 :(得分:0)

如果您因多个DEX文件而出现问题

删除整个目标文件夹并再次构建项目。这不会影响您的项目,因为目标文件夹中的所有内容都会再次构建。

答案 7 :(得分:0)

更改实现fileTree(包括:[' .jar'],dir:'libs')到 在您的应用程序中提供了fileTree(包括:[' .jar'],dir:'libs')gradle.build&gt;依赖。

确保模块设置&gt;中已更改依赖性{include = [* jar] dir = libs}。它必须具有旁边的提供范围而不是实现。