如果我从命令行运行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'
}

当前回答

运行gradle -q dependencies(或gradle -q:projectName:dependencies)生成依赖项报告。你应该看到r7从哪里来,比如:

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    |    \--- com.google.android:support-v4:r7
|    +--- com.commonsware.cwac:camera:0.5.4
|    \--- com.android.support:support-v4:18.0.+ -> 18.0.0
\--- com.android.support:support-v4:18.0.+ -> 18.0.0

然后,使用exclude指令来阻止该依赖。在我的情况下,它来自我的cwc - camera库,所以我使用:

dependencies {
    compile('com.commonsware.cwac:camera-v9:0.5.4') {
      exclude module: 'support-v4'
    }

    compile 'com.android.support:support-v4:18.0.+'
}

(其中第二个compile语句指示您实际需要的版本)

如果你再次运行依赖报告,你会看到:

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.commonsware.cwac:camera:0.5.4
\--- com.android.support:support-v4:18.0.+ -> 18.0.0

其他回答

我通过向我的构建中添加以下代码来解决类似的错误。android块中的Gradle文件。

android {
    dexOptions {
        preDexLibraries = false
    }
}

我能够通过简单地添加来解决我的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文件

如果您已经从Eclipse导入了项目。

1. The select project 
2. Go to File -> **Project Structure**
3. Select app in **module** section on left hand panel
4. Select **Dependency** tab
5. Your able to see jars you have added in eclipse project for v4 and v13.
6. Remove that jar by clicking on minus sign at bottom after selection
7. Click on Plus sign select **Library Dependency** 
8. Choose V4 and V13 if added
9. Press Ok and Clean and Rebuild your project

将Eclipse项目导入Android studio后所面临的场景。

希望这能有所帮助。

我在升级到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'

这是一个烦人的问题,需要花一些时间来找出根情况。你应该继续的方式是@CommonsWare答案。

我最近遇到了这个问题,发现它很难解决。

我的问题是我在build.gradle中包含了一个“+”版本的库。最新版本的库包含一个旧的dex和bang。

我回到旧版本的库,并解决了它。

最好运行androidDependencies,看看到底发生了什么。在构建文件夹中搜索也很好。

最重要的是,Android Studio 2.2提供了内置功能来跟踪这个问题。

快乐编码的人