Android Twitter Fabric SDK 与 Google GSON 冲突

标签 android twitter gradle gson twitter-fabric

我在将 Twitter Fabric SDK 集成到我的应用程序时遇到了困难。我按照 Twitter tutorial 的步骤操作一切都很顺利,但是当我尝试用 gradle 构建我的项目时,出现了这个错误:

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)

我尝试从我的应用程序模块 lib 文件夹中删除我的静态 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;
    }
}

最佳答案

我是 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 内部使用。

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

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.
}

关于Android Twitter Fabric SDK 与 Google GSON 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26528968/

相关文章:

Ruby TweetStream 位置功能不起作用

android - 如何使用gradle ktx为Android robolectric测试设置-noverify选项?

android - 如何在Android应用程序中支持GESTURE、左/右滑动、多种过渡效果

java - 无法在 Android Studio 上解析方法 setToNow()

ios - Twitter iOS 流媒体 API : no data being received

r - 按月绘制单词的推文计数/频率

git - 每个git分支的IntelliJ运行配置

java - 构建失败 - gradle

java - 找不到构建工具修订版 29.0.2 - Android Studio

android - 在应用程序运行时禁用 Android 设备的按钮