【问题标题】:Unable to execute dex: Multiple dex files define Lcom/facebook/android/AsyncFacebookRunner$1;无法执行dex:多个dex文件定义Lcom/facebook/android/AsyncFacebookRunner$1;
【发布时间】:2013-03-20 12:08:27
【问题描述】:

我有一个 android 应用程序,它调用一个 jar 库,比如 b.jar。 这个 b.jar 库。然后调用 facebook sdk lib。 当我在这种情况下编译我的应用程序时,它总是说

无法执行dex:多个dex文件定义了Lcom/facebook/android/AsyncFacebookRunner$1; 转换为 Dalvik 格式失败:无法执行 dex:多个 dex 文件定义 Lcom/facebook/android/AsyncFacebookRunner$1;

我用了几天的时间让它工作,但是我没能解决这个问题。 有谁知道如何解决这个问题?

【问题讨论】:

  • 这可能是因为在您的项目中多次包含同一个 jar。 facebook sdk lib是如何包含的,它是一个jar吗?如果是这样,请确保您的项目只包含一次(它不会出现在引用的库项目或构建路径等中)。
  • 我将 facebook lib 项目从 Properties->Android->Library->Add 到我的 b lib 项目中。然后,我从 Properties->Android->Library->Add 将 b lib 项目包含到我的主应用程序中。当我在这种情况下设置它们时,我遇到了这个问题。有人有办法解决吗?
  • @JackyLam 嗨,我也面临同样的问题。我希望你解决了这个问题?请分享你是怎么做到的?

标签: android facebook-android-sdk java


【解决方案1】:

转到项目属性,然后转到 Java 构建路径 -> 库 -> 删除 Android 依赖项,然后确定,然后运行您的项目

引用自:https://stackoverflow.com/a/15247670/1585773

非常适合我。

【讨论】:

  • 如果 Facebook sdks 被称为库,那么如果您从 java 构建路径中删除 Android 依赖项,则项目将无法编译,因为 facebook jar 出现在 Android 依赖项中
【解决方案2】:

所有答案都可以解决。他们没有解决问题的根本原因。如果您查看您的项目结构,就会发现有一个 FacebookSDK 项目和您的项目。在这两个项目中,您都有 com.facebook.android(第一个 java 文件是 AsyncFacebookRunner)包,其中包含相同的 java 文件。显然多个 dex 文件会定义你的类文件,你会得到错误。

解决方案 - 从您的主项目(不是 FacebookSDK)中删除 com.facebook.android。

【讨论】:

  • +1 表示“所有答案都是解决方法”。我正在搜索互联网,除了解决方法之外什么也没找到。我很想写一篇关于多项目 dexing 如何工作的文章
【解决方案3】:

对我来说,这是由于与 AddThis SDK 的冲突造成的,因为 AddThis SDK 包含嵌入其中的 Facebook SDK 的部分副本。所以com/facebook/android/AsyncFacebookRunner 类被定义了两次。

我能够使用这些答案解决这个问题:

Android AddThis sdk + Facebook sdk won't build in Android Studio

Android Studio - App Crashing on AddThis.jar - "Sources Not Found" Message

具体来说,通过使用第二个答案中的这一步:

在终端中使用命令zip -d addthis0.0.8.jar com/facebook/* 从 addthis0.0.8.jar 中删除 Facebook 文件

由于我使用的是 Eclipse,因此我不需要执行这些答案中的任何其他步骤。

【讨论】:

    猜你喜欢
    • 2013-01-22
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多