【问题标题】:Unable to execute dex: Multiple dex files define Lbolts/AggregateException无法执行dex:多个dex文件定义了Lbolts/AggregateException
【发布时间】:2020-01-04 23:00:13
【问题描述】:

我确实知道之前已经多次报告过多个 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 添加到我的项目中时,它会进入两个容器。必须有某种方式,以便只进入一个。

谁能帮帮我怎么做?

【问题讨论】:

  • 请检查您的任何依赖项是否已包含 android-support-v7-appcompat.jar。此外,您可以在屏幕截图左侧的树视图中看到有两个 android-support-v7 元素。
  • 我已经意识到了。问题是,我无法从任一容器中删除该重复的 jar 文件。我得到的唯一选择是删除整个容器(Android Dependencies 或 Android Private Libraries)如果您的意思是我应该从 dexedLibs 文件夹中删除一个,那也无济于事。下次我编译时它们会重新出现。它们是可执行的字节码
  • “但我也无法从任一容器中删除这个重复的 .jar 文件。”为什么这个?您是否尝试过从两个容器中删除它,并将其作为单独的库添加到它们之外?
  • 我只是无法从任何容器(或​​两者)中删除它:(让我尝试发布它的屏幕截图,或者我可能不知道如何正确的方式。在构建路径窗口中,当我选择了一个jar文件,按钮是灰色的
  • @chteuchteu 查看我在帖子中添加的另一个屏幕截图。此外,在 buildpath 窗口中,选项是灰色的

标签: java android android-support-library android-appcompat bolts-framework


【解决方案1】:

已解决

bolts-android 库是这里真正的麻烦。它有两个不同的版本导致了冲突。 FacebookSDK 库带来了bolts-android-1.1.2android-support-v7-appcompat 带来了bolts-android-1.1.4

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

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

【讨论】:

  • 是的,我发现版本不匹配非常可疑,但是取消标记是什么意思...您的意思是从构建路径中删除吗?
  • 是的。但你知道吗...我每次打开 Eclipse 时都必须取消标记它。 :/ 还没有为这个问题的解决方案提供资金 :/ 我认为这是一个 Eclipse 错误或什么的
  • 从主项目中删除 bolts-android 和 android-support 库对我有用。 :)
  • 但就我而言,我想知道为什么每次我打开 Eclipse 时,它​​都会再次出现;我必须再次删除它。我每次都必须删除一个 bolt-android 库:(
  • 从我的 gradle.build 中移除螺栓修复它
【解决方案2】:

我最近在我的 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'
}

【讨论】:

  • 谢谢哈桑,我的问题是一样的,但使用了不同的包。似乎 react-native 在 'react-native-firebase-analytics' 和 'react-native-fcm' 上使用了一些不同的依赖版本,而这种不同的 dexDebug 在我的项目中失败了。还使用一些像“preDexLibraries”这样的“dexOptions”非常有助于找到具有重复版本的包。将 package.json 中这些包的版本更改为在 gradle 运行中匹配的版本,而不是在主应用程序 build.gradle 中排除某些包,这可能是更好的解决方案。
【解决方案3】:

将 facebook SDK 添加到 Android 时可能会发生这种情况,您可以通过以下方式解决:

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

【讨论】:

    【解决方案4】:

    由于 react 版本已经更新到 0.31.0,当你想集成 com.facebook.fresco:animated-gif:0.10.0 里面有 com.parse.bolts 很好,你可以这样做:

     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'
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多