提问者:小点点

尝试将Google Maps导入到Google Maps项目时,多个dex文件定义了Android studio错误


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

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

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

意外的顶级异常:com.android.dex.DexException:多个索引文件定义Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServicesInfoVersionImpl;位于com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)位于com.andrid.dx.merge.DxMerger.mergeDexes(DeyMerger.java:170)位于com.android.dx.merge/DexMerger.merge.mergeLibraryDexBuffers(Main.java:439)位于com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)位于com.android.dx.command.dexer.Main.run(Main.jjava:230)位于com.android.dx.command.dexer.Main(Main.jjava:199)

失败

失败:生成失败,出现异常。

  • 错误:任务“:app:dexDebug”的执行失败。com.android.ide.common.internal.LoggedErrorException:无法运行命令:C:\Program Files\android studio\sdk\build tools\android-4.4.2\dx.bat--dex--输出D:\Armndo\android studioProjects\Project4\app\build\dex\debug D:\Armindo\AndroidStudioProjects\Project4 \app\bbuild\classes\debug D:\Armido\android studioProjects \Project4\app\build\ddependency cache\debug D:\ArmindostudioProjects\Project4\app\build\pre-dedexed\debug\android-support-v13-f0554868bfbee0fc4abfdc11fdd962734ae0c6d5f.jar D:\Armndo\android studioProjects \Project4\app\build\pre-dexed\debug\android-ssupport-v4-16277ee73bd8328d9fa6b95c79f131076fa8f4be.jar D:\Armindo\android\android\Projects\Project4\app\build\pre-dedexed \debug\bolts-714d8ee0ce6246f4109e78b8cded1f42 aea8693.jar D:\Ammindo\androidstudioProjects\Project4\app\build\pre-dedexed\debug\classes-291c4de37af2df287d3f0bde38005eb4ecb484f4.jar D:\Armindo\Android studioProjects \Project4\app\build\pre-deindexed\debg\classes-82c2a48def34cb7b1f99f973c27e1ef8562b4177.jar D:\Armido\Andr studioProjects\app\build\precoded\deb\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)

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

依赖项{编译文件树(目录:'libs',包含:['*. jar'])
编译项目(':库:脸书')
编译'com.google.android.gms:play-services:'
}

facebook的build.cradle:

依赖项{编译文件树(目录:'libs',包含:['*. jar'])
编译文件('libs/bolts.jar')
编译文件('libs/android-support port-v4.jar')
}

只有当我将< code > compile ' com . Google . Android . GMS:play-services:' 添加到项目的摇篮中时,才会出现该错误。

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

第2版:改变了facebook构建摇篮的依赖性:

compile-用于编译主要源代码的Classpath---项目4.库:facebook:未指定
|\---com.android.support:support-v13:13.0-

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

Edit3:在注释之后,在两个版本上再次将buildTools版本更改为19.0.1。还更改了facebook.cradle编译'com.android.support:support-v4:19.0.1'

最后一次也是最后一次编辑:修正!我的应用程序build.cradle:依赖项{compile‘com.google.android.gms:play-services:4.4.52‘compile fileTree(包括:[‘*.jar‘],dir:‘libs‘)compile file(‘build/libs/Parse-1.5.1.jar‘)compileproject(‘:libraries:facebook')}

我的facebook的lib build. cradle:依赖{compile'com.google.android.gms:play-services:4.4.52'编译文件树(包括:['*.jar'],目录:'libs')编译文件('build/libs/Parse-1.5.1.jar')}

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


共2个答案

匿名用户

脸书不应该以这种方式包含v4支持库——如果您将它作为一个常规的jar包含,而不是使用它的Maven坐标,构建系统就无法区分它的多个副本(它也是通过它对Play服务的依赖来选择它的)。

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

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

注意,自动包含< code>libs目录中所有jar的指令也被删除了。

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

编辑:

第一次回答问题的时候,我有一个使用支持的声明——v4:13.0。因为这是脸书在SDK的v3.14.1中规定的。但是,我将其修改为使用support-v4:19.0。。在您的情况下,您包括Play服务,这依赖于支持库的更高版本。也许在v4支持库的同一个版本上获得所有东西会有所帮助。

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

匿名用户

通过将play服务导入两个build.cradle文件compile < code > com . Google . Android . GMS:play-services:4 . 4 . 52 修复了此问题