无法执行dex:多个dex文件已定义


125

我知道这个问题已经在这里问过几次了。但是我还没有看到任何可能的解决方案。在我将项目“以Android应用程序身份运行”之前,如果我不清理它,则会收到以下错误,必须重新启动Eclipse ...并再次清理。

Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define
     Lcom/jstun/core/attribute/MessageAttributeInterface;

com.jstun.core ...是我的src文件夹的一部分,我当然不能删除它。即使我删除该软件包,另一个软件包也会显示为错误,例如:

Unable to execute dex: Multiple dex files define
     Landroid/support/v4/app/ActivityCompatHoneycomb;

自更新为ADT 15以来,我已经看到此错误,我在Ubuntu上使用Eclipse Galileo。感谢您的回复!


我尝试了该线程中的几乎所有内容,但没有成功。我通过删除项目,然后创建一个新项目并复制备份中的源文件来解决该问题。
linuxjava


在以下链接中查看我的答案。stackoverflow.com/a/38391449/3702595
Sattar Hummatli

Answers:


136

这是一个构建路径问题。

  • 确保您的bin文件夹未包含在您的构建路径中。

  • 右键单击您的项目->转到属性->构建路径。

  • 确保Honeycomb库在您的libs/文件夹中,而不在您的源文件夹中。

  • 将库libs/分别包含在构建路径中。

    顺便说一句,您可能希望引入该android-support-v4库来获得Ice Cream Sandwich支持,而不是Honeycomb支持库。


50
如果您的构建路径中实际上包含多个版本的库,也会发生此问题。从libs路径中删除未使用的库,清理并保存项目,重新启动Eclipse并再次对其进行重新编译对我有用。
Aryo

从构建路径中排除bin文件夹为我解决了这个问题。谢谢!
alekop 2014年

2
问题的根本原因在于,其中一个库正在使用nineoldandroid库作为存储在./libs目录中的jar,而另一个项目正在通过引用它使用nineoldandroid
Deepika Lalra 2014年

当您Foo.java在包装和Foo.java罐子中libs/
放入

当您的项目文件夹位于Google云端硬盘中时,就会发生此错误/错误。我想当云端硬盘同步时,它就会出错。至少对我来说
ymerdrengene 2015年

58

我今天遇到了类似的错误,原因是我的应用程序项目使用的两个库项目引用了支持库,但版本不同。

详细信息:我的应用程序取决于2个图书馆项目

  • FaceBookSDK 3.0->引用android-support-v4
  • ActionBarSherlock->引用android-support-v4,但具有修改后的版本以支持地图。

为了解决该问题,我不得不使FaceBookSDK库依赖于ABS库而不是直接依赖于支持库。


是的,我的问题很相似。两个库都有httpmime库,因此我删除了一个库,并使其指向另一个项目。
马特

10
你们每个人都能确切说明您的做法吗?
萨米A

3
在我提到的示例中,@ samih首先从FaceBookSDK项目lib文件夹中删除了android-support-v4 jar并构建了路径。然后,我添加了对ActionBarSherlock库项目的引用。
M.Sameer

对我而言,另一位开发人员在不删除旧版本的情况下添加了新版本的库jar文件。因此,有两个罐子具有相同的类别。因此,错误“多个dex文件...”可以执行grep -r'OffendingClassName'| grep jar $搜索包含类名的jar文件。
bibstha

类似,但是我不小心将android-support-v4.jar它们都添加到了Eclipse构建路径中,并将其手动添加到了libs我创建的文件夹中。由于重复的引用,我无法编译(并得到OP收到的错误消息)。我删除了libs我愚蠢创建的文件夹,一切正常。感谢您的提示。
kurtzbot 2013年

47

对我来说很好,我删除了libs文件夹中的文件android support v4.jar,一切都解决了。祝好运 :)


1
对我来说,这是一个文件android support v4.jar(1).jar我刚刚将其删除,并清理了项目!
ymerdrengene

33

我发生了同样的错误,每次修复它时,重新启动Eclipse后它都会回来。

首先,正如其他人所说,请确保您的项目中没有同一个.jar文件的多个副本。

就我而言,我有一个使用ActionBarSherlock的主项目(在其他库项目中)。对我有用的窍门是进入ActionBarSherlock --> Properties --> Java Build path --> Order of Export和取消选择Android Private Libraries。然后进入Project -> Clean,现在您应该能够正确构建项目。

现在,由于某种原因,每次我重新启动Eclipse时,它都会自动启用该复选框,因此我必须再次重复此过程。

希望这可以帮助一些迷失的灵魂:)


32

转到项目/属性和Java构建路径,然后取消选中Android私有库


1
也解决了我的问题!
Totic

但是它阻止了gcm.jar正常工作,如何使它运行而没有此错误?
Narendra Singh'2

我遇到错误:多个dex Lcom / google / android / gms / analytics / internal / Command $ 1。谷歌播放升级到22.1.1后,我得到了这个。在Google Play项目中取消选择私人图书馆可消除该错误
eugene 2015年

你救了我的命!THX〜
狮子座谢长廷

15

对我来说,只需转到项目属性>> Java构建路径>>订单和导出。取消选中所有外部库,如下图所示。它对我有用。希望对您有所帮助。

项目属性


这对我来说是个问题
Piyush-问任何差异

8

我的项目中也遇到了这个问题。AVD无法重新加载资产,lib,res等文件夹上下文。问题:Dex Loader]无法执行dex:定义了多个dex文件Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl

然后,我创建了新的项目和复制MainActivity.javaactivity_main.xml,绘制背景。然后从浏览包中删除旧项目,重新启动Eclipse和AVD。我的项目现在可以正常工作.... :)我希望这一步对您有所帮助.. !!


8

我有同样的问题,我尝试过的是:

  1. 项目清单
  2. 打开项目构建路径,
  3. 选择“库”标签,
  4. 删除除Android库以外的所有库
  5. 添加所有必需的JAR文件,
  6. 并做了!

对我有用,谢谢。


是的,我也一样。删除了所有的jar文件,添加回去。在订单和导出中,未经检查的依赖关系以及已检查的所有库都已添加
Maulik Sheth 2013年

6

如果您中的某些人遇到了针对phonegap的facebook-connent-plugin的问题

尝试删除bin / class / com / facebook / android目录中的文件!->并重建


这是正确的答案。解释是----两次包含facebook.android。一旦进入包含在您的项目中的facebookSDK.jar中,并且一旦将Java文件直接包含在您的项目中。从项目中删除它是干净的方法。所有其他答案都只是解决方法,将不会导出定义等内容。–
Sandeep Taneja 2014年

6

就像其他人提到的那样,当您在构建路径或安装程序的其他位置具有相同类的多个副本时,会发生这种情况。

我已经将android-support-v4.jar添加到我的libs /文件夹中,并且eclipse以某种方式向bin / classes / android-support-v4.jar添加了第二个副本。

您可以使用

grep -r YourOffendingClassName YourApp | grep jar

在bin / classs中删除多余的副本可以解决问题-不确定Eclipse为什么在此处制作副本。


1
我尝试了这里列出的所有其他选项,但这是为我解决了这个选项!:)是的,Eclipse应该死了,Android Studio应该获得其1.0版-这样,世界将会变得更好。
约翰·保罗

5

我收到此错误的另一个原因。我错误地添加了v4和v13支持库。因为我的minSdkVersion是15,所以这对我来说不是必需的。

通过包括v13支持库来修复它。另外,请确保在eclipse中选中导出的库构建路径中的库。我也将其移至顶部。


这也是我的意思。v13支持库包括 v4支持库,因此dex显示了多个类声明。
凯尔·法尔康纳

4

即使经过多个答案,也没有解决方案对我有用。

我从构建路径中删除了“ Android Dependencies”。再次将所有jar文件添加到构建路径,错误消失了。某种程度上,月食似乎可以缓存事物。


3

我把答案留给像我一样遇到这种情况的人。

我偶然发现了这里,然后才发现我错误地将Support Library JAR文件拖放到了src文件夹中。由于我不知道它是如何发生的或何时将其放到那里的,所以我无法想象那里有什么问题。

我遇到了同样的错误,一段时间后我发现了问题并将其删除。项目现在运行正常。


3

对我来说,解决方案是执行以下操作:

  1. ->项目中的lib目录,并删除任何多个元素。
  2. 项目->属性-> Java构建路径并删除任何依赖库是自动添加的,而不是您自己添加的!->申请
  3. 重新启动Eclipse IDE
  4. 现在清理项目。
  5. 在设备/仿真器上运行/调试项目...祝您好运

问题仍然存在
AKHIL耆那教

2

我最初的问题是:

无法执行dex:java.nio.BufferOverflowException。检查Eclipse日志中的堆栈跟踪。

1)我右键单击我的项目-> Android工具->添加支持库 (运行我的应用程序...没有用,所以我继续使用它...)2)再次右键单击我的项目-> 属性-> Android->在Project Build Target上检查Android 4.1.2(16)(再次运行该应用...并获得以下信息:

无法执行dex:多个dex文件定义了Landroid / support / v4 / app / BackStackState;

3)因此,我转到了项目上的“ lib”文件夹,并删除“旧的” Android.support.library.jar (运行应用程序,用手指交叉……)

有用!

希望它能帮助某人...谢谢人们!


2

我遇到过这个问题,但这并不意味着相同的库已多次加载,但是System试图同时加载具有相同名称和可能相同包名称的类,即

  • com.pack1.deClass Geometrylibrary1.jar

还有另一个

  • com.pack1.deClass Geometrylibrary2.jar.

您应该如何处理?您应该分析使用了哪些方法,即library1.jar或library2的方法。

有2个解决方案,

  1. 重命名程序包名称,然后dalvik解释为它们是不同的类
  2. 或者,如果您想冒险,请清除不包含我们真正使用的方法的类。

我希望这可以澄清这个常见问题。


2

我从构建路径中删除了Android依赖项,并且它起作用了。


1

当我在我的应用程序项目中引用了我的Eclipse工作区中的一个Library项目(在我的情况下为Facebook SDK)并同时将Facebook SDK作为jar包含在libs文件夹中时,发生了此错误。删除库引用,但将jar保留在libs文件夹中,可以消除该错误。


1

我有同样的问题。我必须删除该.apk文件,然后它才能工作。


1

对我来说,我从lib文件夹中删除了android-support-v4.jar,也从构建路径中删除了它。


您好,Rach,欢迎来到Stackoverflow。您的答案因篇幅和内容而被标记为低质量。回答问题时,请提供有关如何解决问题的其他说明。它将帮助他人并赢得您的声誉:)
超级英雄

1
  • 右键单击项目并转到 build Path>configuration build path
  • 选择库选项卡,然后单击support-v4 library并单击删除
  • 点击确定

然后清理您的项目并运行它就可以了:-)


0

如果有人像我刚才那样在这个问题上大惊小怪:

我的案例涉及一系列图书馆项目。只需对所有库执行干净的项目即可修复所有问题


0

我在日食中找到以下解决方案...希望它对您有用:)

Right click on the Project Name

Select Java Build Path, go to the tab Order and Export

Unchecked your .jar library's

0

当同一库多次添加到您的项目时,会发生此问题。如果您没有故意多次添加该库,请检查您在项目中添加的库的依赖项/私有库,很可能它们已经包含了引起此冲突的库。


0

我也很努力地发现这是问题。在我的情况下,发生的是将apk复制到电子邮件(拖放)时-错误地将apk粘贴到了其中一个软件包的src文件夹中。从源文件夹中删除apk后,它可以正常工作。


0

我在Intellij中遇到了这个问题,这是因为我添加到项目中的ActionBarSherlock库将android-support-v4.jar定义为编译依赖项,并且此jar已包含在我的项目中,因此在编译时间。

解决方案是将这个jar的ActionBarSherlock模块依赖性更改为Runtime而不是编译,因为我的项目已经提供了它。


0

对我来说,问题在于,我早些时候添加了一个lib项目(autobahn lib),后来又将其切换到同一库的Jar文件中。按照这里所有的答案,我检查了构建路径等。但是我还没有添加这些库来手动构建路径。所以我没有什么要删除的。终于遇到了这个文件夹。

bin / dexedLibs

我注意到有两个名称相同的jar文件与导致冲突的autobahn Android相对应。所以我删除了dexedLibs文件夹中的所有jar文件,并重建了项目。那解决了问题。


0

要添加大量其他潜在资源...我已经更新了项目lib文件夹中的所有库,但是Eclipse“有帮助”地重新安装了所有原始库。Eclipse内部不再对这些库进行任何引用,但是外部dex-maker程序仅获取了目录中的所有文件lib,因此获得了几个库.jar文件的两个版本。

git status确定了新文件并git clean -f为我清除了它们(尽管有时我必须在Windows上等待或重新启动Eclipse,因为它仍然可以从副本中打开文件)。


0

ULTRA简单的解决方案和最好的解决方案:

删除右键单击主项目的文件夹->属性-> Java构建路径中的所有内容,但Android XY(其中XY是android中的版本)除外。清理并构建。做完了!

在此之前请确保拥有一个android-support-v4.jar。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.