Android Twitter Fabric SDK与Google GSON发生冲突

我在将Twitter Fabric SDK集成到我的应用程序时遇到困难。 我遵循Twitter教程的步骤,一切顺利,但是当我尝试用gradle构build我的项目时,出现此错误:

Error:Execution failed for task ':app:dexDebug'. > com.android.ide.common.internal.LoggedErrorException: Failed to run command: D:\Android\android-studio\sdk\build-tools\android-4.4W\dx.bat --dex --output ... Error Code: 2 Output: UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define Lcom/google/gson/JsonSerializer; 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) 

我试图从我的应用程序模块库文件夹中删除我的静态Gson库,一切都很好。 同样,当删除行添加从gradle模块依赖关系的twitter sdk,所以我敢肯定,这两者之间有某种冲突,我正在寻求解决它。

任何帮助将不胜感激 !

如果它可以有任何用户在这里有我的gradle应用程序模块文件:

 apply plugin: 'com.android.application' apply plugin: 'io.fabric' android { ... buildTypes { release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { signingConfig signingConfigs.debug ext.enableCrashlytics = false } } } repositories { jcenter() mavenCentral() maven{ url 'https://maven.fabric.io/repo'} } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile project(':facebook') compile 'com.android.support:support-v13:20.0.0' compile 'com.google.android.gms:play-services:6.1.11' compile('com.twitter.sdk.android:twitter:1.0.0@aar') { transitive = true; } } 

Solutions Collecting From Web of "Android Twitter Fabric SDK与Google GSON发生冲突"

我是一个Twitter的Android开发人员。

尝试运行./gradlew app:dependencies查看您的gradle任务的所有依赖关系。 你的编译依赖将包含如下内容:

 +--- com.twitter.sdk.android:twitter-core:1.0.0 | | +--- com.squareup.retrofit:retrofit:1.6.1 | | | \--- com.google.code.gson:gson:2.2.4 | | +--- com.google.code.gson:gson:2.2.4 | | \--- io.fabric.sdk.android:fabric:1.0.0 

这说明GSON确实在内部被Fabric所使用。

我的build议是从您的libs /文件夹中删除GSON,并将其添加为build.gradle中的直接依赖项,而不是将其从Twitter deps图中排除。 您也可以利用构build工具中的依赖关系parsing机制。

 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) // Maybe remove this. compile project(':facebook') compile 'com.android.support:support-v13:20.0.0' compile 'com.google.android.gms:play-services:6.1.11' compile('com.twitter.sdk.android:twitter:1.0.0@aar') { transitive = true; } compile 'com.google.code.gson:gson:2.2.4' // Added. } 

结构SDK必须在内部使用Gson,因此如果暴露在外,您也可以使用它,并从您的/ libs /中移除Gson。

或者在Gradle中导入两个图标作为依赖关系,然后您可以从Fabric中排除Gson。

从织物中排除gson像这样:

 compile('com.twitter.sdk.android:twitter:1.0.0@aar') { transitive = true; exclude module: 'gson' }