8

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)

アプリ モジュール lib フォルダーから静的 Gson ライブラリを削除しようとしたところ、その後はすべてうまくいきました。gradle モジュールの依存関係から twitter sdk を追加する行を削除するときも同じなので、これら 2 つの間に何らかの競合があると確信しており、解決しようとしています。

どんな助けでも大歓迎です!

それが人々に役立つ可能性がある場合、ここに私の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;
    }
}
4

2 に答える 2

13

私は 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 によって内部的に使用されていることを示しています。

Twitter の deps グラフから GSON を除外するのではなく、GSON を libs/ フォルダーから削除し、build.gradle に直接の依存関係として追加することをお勧めします。ビルド ツールの依存関係解決メカニズムを利用することもできます。

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.
}
于 2014-10-23T23:15:47.407 に答える