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

Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat

提问人:xrd 提问时间:1/8/2014 最后编辑:CommonsWarexrd 更新时间:4/15/2021 访问量:173182

问:

如果我从命令行运行,我突然收到以下错误: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 库感到困惑。我已经运行了,当我重新运行assembleDebug时,它总是出现在那里。gradle clean

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

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 gradle android-support-library android-gradle-plugin

评论

1赞 Sam003 3/26/2015
我尝试了所有的解决方案,但碰巧所有解决方案都不起作用。然后,我刚刚创建了一个同名的新项目,并从旧项目中复制了所有文件。它现在效果很好。希望对你有所帮助。
0赞 clementiano 3/27/2018
我在 support-v13 中的一个组件上遇到了这个问题。经过大量调试并尝试了所有答案都无济于事,当我尝试将 kotlin 集成到项目中时,我发现它是引入的,这是一个现有的 java 项目。我删除了 kotlin 标准库和其他 kotlin 库,这很好。仍然会尝试解决 kotlin 的问题,但现在,我必须工作。任何信息也会有所帮助,真的很喜欢 kotlin。

答:

305赞 CommonsWare 1/14/2014 #1

运行 gradle -q dependencies(或 gradle -q :p rojectName: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

然后,使用该指令阻止该依赖项。就我而言,它来自我的 CWAC-Camera 库,因此我使用:exclude

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

评论

3赞 dbro 1/22/2014
有没有一种方法可以从 Maven 上不可用的 .jar 依赖项中检查/排除模块? 似乎没有报告添加的依赖项gradle dependenciescompile files('libs/example.jar')
3赞 dbro 1/22/2014
假设我有两个具有共同模块的依赖项,但两者都不能作为工件使用。有什么方法可以执行类似的依赖项检查/类排除?libs/*.jar
2赞 CommonsWare 1/22/2014
@dbro:我不知道,但是,话又说回来,我没有研究过这一点。恕我直言,这些 JAR 文件中的一个或两个都感觉被错误打包了,因为共同的模块应该被分解到它自己的 JAR 中。
12赞 Defuera 11/18/2014
./gradlew -q :p rojectName:dependencies 对我有用
15赞 espinchi 11/23/2014
对于那些从模块依赖项中排除模块的人的快速提示:您必须将 .请注意括号。compile project(':foo')compile(project(':foo')) { exclude module: 'support-v4' }
6赞 ashishduh 3/27/2014 #2

我遇到了同样的错误,但那是因为我最近从使用 v4 更改为 v13。所以我所要做的就是清理这个项目。

评论

1赞 Allan Spreys 4/25/2014
升级 intellij 后出现同样的错误,清理项目解决了这个问题。
33赞 Ed Manners 4/30/2014 #3

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

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

评论

3赞 CopperCash 7/9/2014
更具体的说明?找不到“androidDependencies”。感谢
0赞 AutoM8R 12/8/2014
转到 Gradle 视图,然后找到标题 All tasks,向下钻取应用名称,然后向下钻取 “:app”,你会在那里找到 “androidDependencies”。
2赞 Paul Beusterien 2/5/2015
Gradle 视图在哪里?
4赞 JCricket 2/6/2015
@PaulBeusterien 如果你看向窗口的最右侧,有一个标记为 Gradle 的侧向选项卡。单击它可打开固定视图。androidDependencies 实际上是一个 gradle 任务
0赞 MBH 1/18/2016
谢谢你,伙计,我发布了屏幕截图,解释了你的答案,以使其更容易。
123赞 mike.tihonchik 6/4/2014 #4

我通过在android块内的build.gradle文件中添加以下代码来解决类似的错误。

android {
    dexOptions {
        preDexLibraries = false
    }
}

评论

4赞 Barrie Galitzky 7/23/2014
为我工作!这样做有什么缺点吗?
0赞 mike.tihonchik 7/23/2014
@BarrieGalitzky到目前为止,我还没有遇到任何问题
3赞 Marino 10/23/2014
谢谢伙计,这完美地解决了这个问题!无论如何,我认为它有一些副作用。assembleDebug 任务变慢了 3 倍!
0赞 Oliver Dixon 1/31/2015
未找到 dexOptions。
10赞 DroidHeaven 5/20/2017
添加此内容后,我收到“翻译已中断”错误。我想我必须尝试一下 CommonsWare 方法。
2赞 KadoLakatt 1/26/2015 #5

在 Android Studio 中,转到 build.gradle(检查项目和模块 build.gradle 文件)并搜索重复的依赖项。

删除项目不需要的那些。

9赞 Tony Thompson 5/18/2015 #6

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

编译 (project(':yourAndroidLibrary')){ 排除模块:“support-v13” }

你会发现问题

找到不支持的 Gradle DSL 方法:“exclude()”

如果您使用 编译项目(':yourAndroidLibrary'){ 排除模块:“support-v13” }

区别在于“project”前面的手镯“(”“)”。

评论

0赞 Marko 7/7/2015
谢谢,缺少双括号!
8赞 Pellet 7/9/2015 #7
exclude module: 'support-v4'

对于项目依赖项的我不起作用,我可以让它工作的唯一方法是通过以下语法:

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

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

5赞 voghDev 7/28/2015 #8

我在遗留项目上遇到了同样的错误。我的错是支持库包含两次:一次在 google-play-services 库中,另一次是独立的。

这是我修复它的方式:

错误的 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'
}

希望它能帮助某人:-)

1赞 albert 8/18/2015 #9

我删除了 编译“com.android.support:support-v4:18.0.+” 在依赖项中,它起作用了

评论

2赞 Anirudh Sharma 8/18/2015
这应该是一个评论,否则你应该以更好的方式解释它。
2赞 MobileEvangelist 9/19/2015 #10

如果您已从 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 后我遇到的情况。

希望这会有所帮助..

8赞 Giannis P 11/15/2015 #11

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

解决了这个问题:

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

更多信息请见 错误:任务“:app:dexDebug”执行失败。 >命令以非零退出值 2 完成

评论

1赞 James Goodwin 12/6/2015
Multidexing 会使您的应用程序启动速度变慢,只有在您确实需要时才使用它。
3赞 barry 12/14/2015 #12

我正在使用并且无法开始工作。com.google.android.gms:play-services-analytics:8.3.0android-support-v13.jarexclude module: 'support-v4'

对我有用的是使用工件而不是文件。android-support-v13android-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')

}

36赞 MBH 1/18/2016 #13

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

为了让像我这样的初学者更轻松、更快速地完成这项任务。这是屏幕截图,显示了@edsappfactory.com 发布的对我有用的答案:

首先打开 Androidstudio 右侧的 Gradle 视图,在应用的项目中转到,然后右键单击,然后选择:TasksAndroidandroidDependenciesRun

step 1

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

Step 2

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

因此,要执行 gradle 命令:

第一:

first

第二:

second

很简单。

就是这样。

谢谢。

2赞 Yuliia Ashomok 7/10/2016 #14

从 Gradle 缓存中删除所有文件解决了我的问题。

在 Linux 上:

rm -rf ~/.gradle/caches/*
2赞 Arun C 9/25/2016 #15

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

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

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

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

运行你的 androidDependencies 并查看实际情况是件好事。在您的构建文件夹中搜索也很好。

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

快乐的编码家伙

3赞 WindRider 11/20/2016 #16

就我而言,问题是由版本不一致引起的:

Build tools 25
compileSdk 24
targetSdk 24
Support library 24

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

11赞 Stevey 2/22/2017 #17

升级到 ButterKnife 8.5.1 时开始出现此错误。这里的其他答案都不适合我。

我曾经看到过树,然后浏览 jar 文件,直到我发现冲突。冲突在于 butterknife 的依赖包含可访问性类的一个版本,并且还包含该类。gradle -q :app:dependenciescom.android.support:support-compat:25.1.0com.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 的运营。

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

评论

0赞 Jay 3/16/2017
保持支持版本相同是简单的解决方案,排除模块对我不起作用。
0赞 GFPF 6/26/2018
我也用第二个解决方案解决了!相同的冲突,但与 Butter Knife 版本 8.8.1 示例:实现 ('com.jakewharton:butterknife:8.8.1') { exclude module: 'support-compat' } annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
0赞 Val Martinez 3/17/2017 #18

最后,我解决了它,修改了模块gradle文件上的这些属性

  1. compileSdk版本 25
  2. targetSdk版本 25
  3. 编译“com.android.support:appcompat-v7:+”
  4. 编译“com.android.support:recyclerview-v7:+”
3赞 shiny vn 3/17/2017 #19

类似的 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') 

我的评分现在如下所示:

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 文件。

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

0赞 matrixer 6/4/2017 #20

添加到我的项目时遇到了同样的问题,这是我的依赖关系树: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 但无法修复它,直到更改版本,我希望这能有所帮助:com.android.support:appcompatandroid/app/build.gradle

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:+"
}

看来多个条目不是什么大问题,版本不匹配是

0赞 Ben Kleywegt 8/16/2017 #21

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

注意:因为您似乎无法放入子句,因此该选项不可用。compile file('...')exclude

0赞 gmyboy 2/28/2018 #22

我遇到了同样的问题,我的解决方案是将支持版本“27.+”(27.1.0)更改为“27.0.1”

0赞 kall2sollies 3/14/2018 #23

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

  • appcompat-v7
  • android-支持-v13

由于遗留原因,appcompat 是从 Google Maven 存储库获取的,而 android-support 是本地 .jar。

当我弄清楚这一点,并用 maven 引用替换这个本地引用时,它只是解决了我的构建问题。

这是我的 app/build.gradle 的差异:

enter image description here

0赞 eatmeimadanish 3/26/2018 #24

我通过将其添加到project.properties中解决了所有问题

cordova.system.library.7=com.android.support:appcompat-v7:27.1.0
0赞 Ragunath CR 8/23/2018 #25

收到以下错误

任务“:app:transformDexArchiveWithDexMergerForDebug”执行失败。

com.android.build.api.transform.TransformException:com.android.dex.DexException:多个 dex 文件定义 Landroid/support/constraint/ConstraintSet$1

修复:转到 Build -> Clean Project

评论

0赞 Elletlar 8/23/2018
嗨,欢迎来到 Stack Overflow。但请不要重复答案,除了已经有 24 个答案外,ashishduh 已经提供了 building clean 作为答案。谢谢!
1赞 Yusuf Khan 6/22/2019 #26

我能够通过简单地添加

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

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