我在将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库,之后一切都很顺利。同样的,当我删除添加Twitter SDK的gradle模块依赖行时,也是如此。所以我相信这两者之间存在某种冲突,并且我正在寻求解决它。
非常感谢任何帮助!
如果这对大家有用的话,这是我的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;
}
}
/libs/
中删除Gson。或者,在Gradle中导入两个库作为依赖项,然后您可以从Fabric
中排除Gson
。 - Blundellcompile('com.google.dexmaker:dexmaker-mockito:1.1') { exclude module: 'hamcrest-core' }
- Blundellcompile('com.twitter.sdk.android:twitter:1.0.0@aar') { transitive = true; exclude module: 'gson' }
这个方法解决了问题。你想要发布答案(获取额外声望等)还是让我来发布? - user3476114