簡體   English   中英

Android Twitter Fabric SDK與Google GSON沖突

[英]Android Twitter Fabric SDK conflict with Google GSON

我在將Twitter Fabric SDK集成到我的應用程序時遇到了困難。 我按照Twitter教程的步驟進行操作,但是當我嘗試用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)

我嘗試從我的app模塊lib文件夾中刪除我的靜態Gson庫,之后一切都很順利。 刪除從gradle模塊依賴項添加twitter sdk的行時也一樣,所以我很確定這兩者之間存在某種沖突,我正在尋求解決它。

任何幫助將不勝感激 !

如果它可以對那里的人有用,這里是我的gradle app模塊文件:

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

這表明Fabric內部確實使用了GSON。

我的建議是從你的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.
}

結構SDK必須在內部使用Gson,因此如果它被公開,您也可以使用它並從/ libs /中刪除Gson。

或者,在Gradle中將兩個庫作為依賴項導入,然后可以從Fabric中排除Gson。

從Fabric中排除gson,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM