我在使用最新版本的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)
失败
失败:生成失败,出现异常。
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
脸书不应该以这种方式包含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 修复了此问题