【问题标题】:Multiple dex files define Android studio error when trying to import Google Maps into Google Maps project尝试将 Google Maps 导入 Google Maps 项目时,多个 dex 文件定义 Android Studio 错误
【发布时间】:2014-06-06 19:08:37
【问题描述】:

我在使用最新版本的 Android Studio 时遇到了一些问题,结合 Facebook SDK(仅用于登录)和 Google Maps API。

我已经在 Android Studio 中建立了一个项目,该项目使用 Facebook 集成,效果很好。但是我的一位同事创建了谷歌地图部分,我试图将其复制/粘贴到我的项目中。我已经按照Google 文档告诉我的方式设置了它。所以这不是问题。

如果我是正确的,我只是在我的项目中的 build.cradle 和 facebook 库的 build.cradle 文件中遇到问题。错误是:

意外的顶级异常: com.android.dex.DexException:多个dex文件定义了Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl; 在 com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594) 在 com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552) 在 com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533) 在 com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170) 在 com.android.dx.merge.DexMerger.merge(DexMerger.java:188) 在 com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439) 在 com.android.dx.command.dexer.Main.runMonoDex(Main.java:287) 在 com.android.dx.command.dexer.Main.run(Main.java:230) 在 com.android.dx.command.dexer.Main.main(Main.java:199) 在 com.android.dx.command.Main.main(Main.java:103)

失败

FAILURE:构建失败并出现异常。

  • 出了什么问题: 任务 ':app:dexDebug' 执行失败。 com.android.ide.common.internal.LoggedErrorException:无法运行命令: C:\Program Files\android-studio\sdk\build-tools\android-4.4.2\dx.bat --dex --output D:\Armindo\Android studioProjects\Project4\app\build\dex\debug D: \Armindo\Android studioProjects\Project4\app\build\classes\debug D:\Armindo\Android studioProjects\Project4\app\build\dependency-cache\debug D:\Armindo\Android studioProjects\Project4\app\build\pre- dexed\debug\android-support-v13-f0554868bfbee0fc4abfdc11fd962734ae0c6d5f.jar D:\Armindo\Android studioProjects\Project4\app\build\pre-dexed\debug\android-support-v4-16277ee73bd8328d9fa6b95c79f131076fa8f4be.jar D: Project4\app\build\pre-dexed\debug\bolts-714d8ee0ce6246f4109e078b8cded1f42aea8693.jar D:\Armindo\Android studioProjects\Project4\app\build\pre-dexed\debug\classes-291c4de37af2df287d3f0bde38005eb4ecb484f4.jar D:\Armin Project4\app\build\pre-dexed\debug\classes-82c2a48def34cb7b1f99f973c27e1ef8562b4177.jar D:\Armindo\Android studioProjects\Project4\app\build\pre-dexed\debug\support-v4 -19.0.1-9046a2105fe8ed5a830061a0f501bb9eb2dfd6b0.jar 错误代码: 2 输出:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
    at com.android.dx.command.dexer.Main.run(Main.java:230)
    at com.android.dx.command.dexer.Main.main(Main.java:199)
    at com.android.dx.command.Main.main(Main.java:103)

我的 cradle 文件中的依赖项如下所示: 项目的 build.cradle:(请注意,主项目中的库被导入到一个文件夹中,例如 library/facebook )

依赖{ 编译 fileTree(dir: 'libs', include: ['*.jar'])
编译项目(':libraries:facebook')
编译 'com.google.android.gms:play-services:+'
}

facebook 的 build.cradle:

依赖{ 编译 fileTree(dir: 'libs', include: ['*.jar'])
编译文件('libs/bolts.jar')
编译文件('libs/android-support-v4.jar')
}

该错误仅在我将compile 'com.google.android.gms:play-services:+' 添加到项目的摇篮时发生。

我已经在这里尝试了几乎所有关于此的主题,并且还尝试在两个底座中导入相同的库。有什么想法吗?

编辑1: 尝试了斯科特所说的。但我相信这是因为它仍然有 2 倍的 Android 支持。使用最新的 3.14.1 Facebook SDK。

编辑2: 改变了 facebook 的 build cradle 的依赖:

compile - Classpath for compiling the main sources. +--- Project4.libraries:facebook:unspecified
| \--- com.android.support:support-v13:13.0.+ -> 13.0.0 | \--- com.android.support:support-v4:13.0.0 -> 19.0.1 \--- com.google.android.gms:play-services:+ -> 4.4.52 \--- com.android.support:support-v4:19.0.1

所以看起来 Facebook 在下面仍然使用 v4..

编辑3: 评论后,将两个版本的 buildToolsVersion 再次更改为 19.0.1。还更改了 facebook.cradle compile 'com.android.support:support-v4:19.0.1'

终端现在为我提供了这个: +--- Project4.libraries:facebook:unspecified
| \--- com.android.support:support-v4:19.0.1 \--- com.google.android.gms:play-services:4.4.52 \--- com.android.support:support-v4:19.0.1
所以我想现在这是正确的,但我仍然收到同样的错误。这是完整的错误日志(我认为它和以前一样。但只是检查墙壁)。

最后和最后的编辑:已修复! 我的应用程序 build.cradle: dependencies { compile 'com.google.android.gms:play-services:4.4.52' compile fileTree(include: ['*.jar'], dir: 'libs') compile files('build/libs/Parse-1.5.1.jar') compile project(':libraries:facebook') }

我的 facebook 的 lib build.cradle: dependencies { compile 'com.google.android.gms:play-services:4.4.52' compile fileTree(include: ['*.jar'], dir: 'libs') compile files('build/libs/Parse-1.5.1.jar') }

要修复它,我只需将播放服务导入 BOTH 库,derp

【问题讨论】:

  • 嗯,它同时使用了 v4 支持库和 v13 支持库。这是问题的新原因。
  • 知道如何解决这个问题吗?我并不是说它必须在任何地方导入它。有什么地方我看的不对吗?
  • 从命令行,在项目根目录中,您可以运行命令gradlew -p app dependencies,它应该会为您提供一个依赖关系树,可以更清楚地了解事物的来源。在同一版本的支持库上获取所有内容;如果您的 minSDK 是 13 或更高版本,则可以使用 v13 支持库;如果小于 13,则使用 v4。
  • 在将 facebook 的摇篮更改为 compile 'com.android.support:support-v13:13.0.+' 后,它确实给了我第一篇文章中的最新消息,因为我使用的是 `minSdkVersion 15。
  • 我修改了我的答案,看看编辑。我仍然认为您没有一致的版本号。

标签: android facebook google-maps android-studio


【解决方案1】:

Facebook 不应该以这种方式包含 v4 支持库——如果您将其作为常规 jar 包含而不是使用其 Maven 坐标,则构建系统无法消除它的多个副本的歧义(它正在拾取它通过它对 Play Services 的依赖)。

在 Facebook 的构建文件中,将其依赖项更改为:

dependencies { 
    compile files('libs/bolts.jar')
    compile 'com.android.support:support-v4:19.0.+'
}

请注意,自动包含 libs 目录中所有 jar 的指令也已删除。

我认为您使用的是旧版本的 Facebook SDK;至少在 SDK 的 v3.14.1 中,这是固定的。

编辑:

当我第一次回答这个问题时,我声明要使用库的 support-v4:13.0.+,因为这是 Facebook 在 SDK 的 v3.14.1 中指定的。但是,我将其修改为使用 support-v4:19.0.+。在您的情况下,您包括 Play Services,这取决于支持库的更高版本。也许将所有内容都放在同一版本的 v4 支持库上可能会有所帮助。

还请注意,您的依赖关系表明您也依赖于 v13 支持库。请注意,这里有两个版本号; v4 支持库有多个版本(13.0.0、18.0.0、19.0.0、19.0.1 和 19.1.0),还有一个 v13 支持库,它也有相同的版本集。确保不要混淆这两个不同的版本号。

【讨论】:

  • 谢谢,我试过了。但它不起作用。我已经在想它是这样工作的,但只是保持这种方式以确保它。即使我使用 Maven 坐标,我现在也遇到了同样的错误。
  • 已修复 Scott,查看我的最新编辑!只需将播放服务导入两个 build.cradle 文件即可修复它compile 'com.google.android.gms:play-services:4.4.52'
【解决方案2】:

通过将播放服务导入 both build.cradle 文件来修复它 compile com.google.android.gms:play-services:4.4.52

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多