多个dex文件定义Landroid / support / v4 / accessibilityservice / AccessibilityServiceInfoCompat

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

如果我为v4 grep我看到我的生成文件夹中的两个文件。

 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 clean ,它总是出现在那里,当我重新运行assembleDebug。

如果我在构build目录中grep for 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指令来阻止该依赖关系。 在我的情况下,它来自我的CWAC相机库,所以我使用:

 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 

我解决了类似的错误,通过添加以下一段代码到我的build.gradle文件在android块。

 android { dexOptions { preDexLibraries = false } } 

另外要注意的是,你可以看到你的android依赖关系,转到你的Android Studio Gradle视图,并select目标“androidDependencies”。

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

因为一张图片胜过千言万语

为了使得像我这样的初学者更容易,更快地完成这项任务。 这是截图显示@ edsappfactory.com发布的答案,为我工作:

首先打开Androidstudio右侧的Gradle视图:

步骤1

其次你会看到这样的东西:

第2步

我发布的主要原因是,知道在哪里执行gradle任务或者上面发布的命令并不容易。 所以这也是执行它们的地方。

所以,要执行gradle命令:

第一:

第一

第二:

第二

就这样简单。

而已。

谢谢。

如果有人发现CommonsWare的答案不能应用于android库项目,这里是修复的片段

compile (project(':yourAndroidLibrary')) {exclude module:'support-v13'}

你会发现问题

发现不支持的Gradle DSL方法:'exclude()'

如果你使用compile project(':yourAndroidLibrary') {exclude module:'support-v13'}

不同之处在于“项目”之前的手镯“(”“)

 exclude module: 'support-v4' 

我不能为项目依赖工作,唯一的办法就是通过下面的语法:

 configurations { dependencies { compile(project(':Android-SDK')) { compile.exclude module: 'support-v4' } } } 

其中:Android-SDK是您的项目名称。

升级到ButterKnife 8.5.1时,我开始出现这个错误。 这里没有其他答案为我工作。

我用gradle -q :app:dependencies查看树,然后查看jar文件,直到find冲突。 矛盾在于,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' } 

迄今为止,这似乎并没有影响ButterKnife的运作。

编辑:有一个更好的解决scheme,这是升级我的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' 

我在传统项目上遇到同样的错误。 我的错是,支持库包括两次:一旦进入谷歌播放服务库,另一个作为独立。

这是我如何解决它:

坏的build.gradle:

 dependencies { compile files('libs/android-support-v4.jar') compile files('libs/core-2.2.jar') compile files('libs/universal-image-loader-1.8.5-with-sources.jar') compile 'com.google.android.gms:play-services:3.2.65' } 

良好的build.gradle:

 dependencies { // compile files('libs/android-support-v4.jar') // not needed compile files('libs/core-2.2.jar') compile files('libs/universal-image-loader-1.8.5-with-sources.jar') compile 'com.google.android.gms:play-services:3.2.65' } 

希望它有助于某人:-)

我有这个相同的错误,但这是因为我最近从使用V4到V13。 所以我所要做的就是清理这个项目。

我有同样的问题,似乎我的应用程序有太多的方法,因为库: http : //developer.android.com/tools/building/multidex.html

解决它:

 android { defaultConfig { ... multiDexEnabled = true } } 

更多这里错误:任务':app:dexDebug'的执行失败。 > comcommand以非零的退出值2结束

在我的情况下,问题是由版本不一致造成的:

 Build tools 25 compileSdk 24 targetSdk 24 Support library 24 

解决scheme很简单:使所有版本25

一个类似的 dex问题解决方法

gradle.build包含:

 compile files('libs/httpclient-4.2.1.jar') compile 'org.apache.httpcomponents:httpclient:4.5' compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1' 

当我删除问题已经解决

 compile files('libs/httpclient-4.2.1.jar') 

我的gradle现在看起来像:

 apply plugin: 'com.android.application' android { compileSdkVersion 24 buildToolsVersion "24.0.3" defaultConfig { applicationId "com.mmm.ll" minSdkVersion 16 targetSdkVersion 24 useLibrary 'org.apache.http.legacy' } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } dependencies { compile 'com.google.android.gms:play-services:6.1.+' compile files('libs/PayPalAndroidSDK.jar') compile files('libs/ksoap2-android-assembly-3.0.0-RC.4-jar-with-dependencies.jar') compile files('libs/picasso-2.1.1.jar') compile files('libs/gcm.jar') compile 'com.android.support:appcompat-v7:24.2.1' compile 'org.apache.httpcomponents:httpclient:4.5' compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1' } 

JAR文件和编译的gradle项目中有冗余

所以敏锐地寻找具有相同类的依赖和jar文件。

并删除冗余。
这对我有效。

如果你从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后面临的场景。

希望这可以帮助..

我正在使用com.google.android.gms:play-services-analytics:8.3.0android-support-v13.jar ,无法获取exclude module: 'support-v4'

什么对我来说是使用android-support-v13 artefact而不是android-support-v13.jar文件。

即,而不是

 dependencies { compile ('com.google.android.gms:play-services-analytics:8.3.0') compile files('libs/android-support-v13.jar') 

}

我用了

 dependencies { compile ('com.google.android.gms:play-services-analytics:8.3.0') compile ('com.google.android:android-support-v13') 

}

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

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

我的问题是我在build.gradle中join了“+”版本的库。 图书馆的最新版本包含了一个较老的dex和bang。

我恢复到旧版本的库,并解决它。

运行你的androidDependencies并且看看发生了什么真是太好了。 它也很好的search你的生成文件夹。

首先Android Studio 2.2提供了构buildfunction来跟踪这个问题。

快乐编码的人

在Android Studio中,转到您的build.gradle(同时检查项目和模块build.gradle文件)并search重复的依赖关系。

删除你的项目不需要的。

我删除了依赖关系中的编译“com.android.support:support-v4:18.0.+”,它工作

从Gradlecaching中删除所有文件修复了我的问题。

在Linux上:

 cd ~/.gradle rm -R -f * 

最后,我解决了在模块gradle文件中修改这些属性的问题

  1. compileSdkVersion 25
  2. targetSdkVersion 25
  3. 编译'com.android.support:appcompat-v7:+'
  4. 编译'com.android.support:recyclerview-v7:+'

添加react-native-palette到我的项目时,我有同样的问题,这里是我的依赖关系树:

 ./gradlew app:dependencies +--- project :react-native-palette | +--- com.facebook.react:react-native:0.20.+ -> 0.44.2 | | +--- javax.inject:javax.inject:1 | | +--- com.android.support:appcompat-v7:23.0.1 | | | \--- com.android.support:support-v4:23.0.1 | | | \--- com.android.support:support-annotations:23.0.1 -> 24.2.1 ... | \--- com.android.support:palette-v7:24.+ -> 24.2.1 | +--- com.android.support:support-compat:24.2.1 | | \--- com.android.support:support-annotations:24.2.1 | \--- com.android.support:support-core-utils:24.2.1 | \--- com.android.support:support-compat:24.2.1 (*) +--- com.android.support:appcompat-v7:23.0.1 (*) \--- com.facebook.react:react-native:+ -> 0.44.2 (*) 

我尝试了很多solutons,无法修复它,直到更改android/app/build.gradle com.android.support:appcompat版本,我希望这可以帮助:

 dependencies { compile project(':react-native-palette') compile project(':react-native-image-picker') compile project(':react-native-camera') compile fileTree(dir: "libs", include: ["*.jar"]) // compile "com.android.support:appcompat-v7:23.0.1" compile "com.android.support:appcompat-v7:24.2.1" compile "com.facebook.react:react-native:+" } 

似乎多个条目不是一个大问题,版本不匹配是

通过将minSdkVersion增加到21并启用multidex来解决compile file('...')冲突。 不知道这是否是最好的解决scheme,但唯一的办法,我可以得到它在我的情况下工作。

注意:对于compile file('...') ,似乎不能放入exclude子句,因此该选项不可用。