如果我从命令行运行gradle assembleDebug,我突然得到这个错误:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.util.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:592)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:550)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:531)
    at com.android.dx.merge.DexMerger.mergeDexBuffers(DexMerger.java:168)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:186)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:300)
    at com.android.dx.command.dexer.Main.run(Main.java:232)
    at com.android.dx.command.dexer.Main.main(Main.java:174)
    at com.android.dx.command.Main.main(Main.java:91)

如果我grep for v4,我会在构建文件夹中看到两个文件。

Binary file build/pre-dexed/debug/support-v4-19.0.0-2ba5fdd60a6c3836b3104a863fe42897da1fa9d1.jar matches
Binary file build/pre-dexed/debug/support-v4-r7-227d905d79b23b20866531d4f700446c040a2ccb.jar matches

我的gradle文件只包括这个支持库:

compile 'com.android.support:support-v13:19.0.0'

我不知道r7库是如何被包含进来的。我已经运行gradle清洁,它总是出现在那里,当我重新运行assembleDebug。

如果我在构建目录中grep r7,我看到它在文件中:

Binary file build/exploded-bundles/ComGoogleAndroidGmsPlayServices4030.aar/classes.jar matches

如果我不包含v13,那么其他东西就不能编译。

但是v13不包括v4支持库吗?

这是播放服务AAR包和v13库之间的不兼容性吗?

我从gradleplease.appspot.com上抓取了gradle文件。

删除播放服务并不能解决这个问题;同样的错误。

我在build.gradle中的依赖项:

 dependencies {


 // Google Play Services
//compile 'com.google.android.gms:play-services:4.0.30'

// Support Libraries
//compile 'com.android.support:support-v4:19.0.0'
///compile 'com.android.support:appcompat-v7:19.0.0'
//compile 'com.android.support:gridlayout-v7:19.0.0'
compile 'com.android.support:support-v13:19.0.0'
compile 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5'
compile 'commons-codec:commons-codec:1.9'
compile 'com.madgag:markdownj-core:0.4.1'
compile 'com.wu-man:android-oauth-client:0.0.2'
compile 'com.google.http-client:google-http-client-jackson2:1.17.0-rc'
compile 'org.apache.commons:commons-lang3:3.2'
compile 'com.google.code.gson:gson:2.2.4'
}

当前回答

另外要注意的是,你可以通过进入android Studio Gradle视图,并选择目标“androidDependencies”来查看你的android依赖项。

还有一个技巧:我一直有这个问题,直到我从项目和相关模块/库项目的libs文件夹中删除了v4支持库。

其他回答

在我的案例中,问题是由版本不一致引起的:

Build tools 25
compileSdk 24
targetSdk 24
Support library 24

解决方案很简单:将所有内容都设置为版本25

我也遇到过同样的问题。 在我的项目中,我有以下依赖项:

appcompat-v7 android-support-v13

由于遗留原因,appcompat是从谷歌Maven repo中获取的,而android-support是本地的.jar。

当我发现这一点,并将这个本地引用替换为一个maven引用时,它就解决了我的构建问题。

以下是我的app/build的不同之处。gradle:

另外要注意的是,你可以通过进入android Studio Gradle视图,并选择目标“androidDependencies”来查看你的android依赖项。

还有一个技巧:我一直有这个问题,直到我从项目和相关模块/库项目的libs文件夹中删除了v4支持库。

我能够通过简单地添加来解决我的react native项目中的问题

configurations {
        all*.exclude group: 'com.android.support', module: 'support-compat'
        all*.exclude group: 'com.android.support', module: 'support-core-ui'
    }

在我的android\app\build的末尾。gradle文件

我在升级到ButterKnife 8.5.1时开始得到这个错误。其他的答案对我都没用。

我使用gradle -q:app:dependencies查看树,然后查看jar文件,直到发现冲突。冲突在于butterknife对com.android.support:support-compat:25.1.0的依赖包含了一个可访问性类的版本,com.android.support:support-v4 . 23.1.1也包含了这个类。

我通过改变我的依赖来解决这个问题:

compile 'com.jakewharton:butterknife:8.5.1'

:

compile('com.jakewharton:butterknife:8.5.1') {
    exclude module: 'support-compat'
}

到目前为止,这似乎还没有影响到黄油刀的运作。

编辑:有一个更好的解决方案,这是升级我的android支持库,以匹配ButterKnife的:

compile('com.android.support:appcompat-v7:25.2.0')
compile('com.android.support:design:25.2.0')
compile 'com.jakewharton:butterknife:8.5.1'