【发布时间】: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