[英]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.