【问题标题】:Multiple dex files error when compiling with ant or Eclipse使用 ant 或 Eclipse 编译时出现多个 dex 文件错误
【发布时间】:2011-12-12 19:10:54
【问题描述】:

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

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

我尝试过清理和重建,我也在 E​​clipse 中尝试过,但它给出了同样的错误。 有人有什么想法吗?我现在在这里的一堵砖墙。

【问题讨论】:

    标签: android ant dex


    【解决方案1】:

    昨天我的系统(还有另一个正在工作的系统)发生了一些事情,SDK 想要推送平台工具更新,但后来我根本无法使用它,等等。

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

    【讨论】:

    • 嘿,是的,这似乎很可能。我已经重新安装了所有的sdk和工具,它似乎已经解决了这个问题。似乎更新到 r14 会导致现有工作区出现问题。不过,我希望有更多的帖子,也许它是特定的、奇怪的。新的 r14 安装很好。感谢您的意见
    【解决方案2】:

    我认为 bin 中的目录从

    com/XXX/XXX
    

    classes/com/XXX.
    

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

    【讨论】:

    • 清洁不能解决这个特定问题,如最初的问题所述
    【解决方案3】:

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

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

    【讨论】:

    • 在没有移除罐子的情况下为我工作。
    • 在我遇到此错误的情况下,我有两个外部 jar,它们都定义了一些相同的类。从我的 libs 目录中删除其中一个 jar 修复了我的错误。
    【解决方案4】:

    你可以:

    • 删除文件夹<.settings><bin><gen>,以及文件<.classpath><.project><project.properties>

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

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

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

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

    【讨论】:

      【解决方案5】:

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

      删除后我就可以成功编译了

      【讨论】:

        【解决方案6】:

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

        1. 当我有两个不同的 android 支持库 jars 时
        2. 当我不小心把一些 Facebook src 放在过去时,不是作为库,而是直接放入我的 src 目录中

        因此,所有表明您不应将 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 环境创建)或查看附加到项目的所有源以查找类 @987654323 的多次出现(如上面的示例代码) @

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

            【解决方案8】:

            将实现 fileTree(include: ['.jar'], dir: 'libs') 更改为 在您的应用程序 gradle.build> 依赖项中提供了 fileTree(include: ['.jar'], dir: 'libs')。

            确保它在您的 Module Settings> Dependencies {include=[*jar] dir=libs} 中也发生了变化。它旁边必须有一个提供的范围,而不是实现。

            【讨论】: