无法执行dex:多个dex文件定义了Lcom / myapp / R $ array;


391

由于更新到ADT14,我无法再构建我的项目。在更新之前,它的构建良好。

错误:

[2011-10-23 16:23:29 - Dex Loader] Unable to execute dex: Multiple dex files define Lcom/myapp/R$array;
[2011-10-23 16:23:29 - myProj] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcom/myapp/R$array;

曾报道过类似的问题,我尝试了其中的建议,包括

  • 正在重新启动Eclipse
  • 清理项目并重建-禁用“项目->自动生成”选项,然后禁用“清理”和“生成”项目,然后尝试运行。将“自动构建”选项重置为“开”
  • 重新安装Android开发人员工具
  • 重新安装Eclipse(更新到最新版本3.7.1)
  • 创建了一个从文件系统导入的新项目
  • 从subversion创建了一个新项目。

您是在Windows还是Mac上工作..因为我想遵循以下答案,但是我不确定他们是否要在Mac上工作..谢谢
McLan 2014年

如果您已经导入了库项目,并且还已在lib文件夹中导入了库JAR,则必须从lib文件夹以及[构建路径->配置构建路径]中删除jar文件。它将起作用。
Mehul

看看我对以下链接的回答。stackoverflow.com/a/38391449/3702595
Sattar Hummatli

Answers:


462

我有同样的问题,很奇怪,因为它仅在使用Eclipse时才发生(但使用Ant可以)。这是我解决的方法:

  • 右键点击 Project Name
  • 选择Build Path->Configure Build Path
  • 在中Java Build Path,转到标签Order and Export

  • 取消选中您的.jar书架

仅在某些情况下: 在“订单和导出”选项卡中,我那里没有任何jar库,因此我没有选中“ Android Private Libraries”项。现在我的项目正在运行。


在我的项目中,我将构建路径中sdk目录中的支持库包括在内,并且“ libs”文件夹中有支持库以支持蚂蚁构建。我取消选中它,它解决了我的问题。
克里斯·菲斯特

20
在上一次构建和启动之间的某个时间,一个新的库神秘地出现在我的项目中:“ Android Private Libraries”包含了我已经引用的支持库。因此出现了这个神秘的“多个dex文件定义____”。检查Java Build Path并查看此新项目,然后取消选中最初包含的支持库,这为我解决了这个问题。
汤姆·佩斯

9
非常感谢。这是正确的解决方案。我真的不知道为什么Eclipse有这么多错误。现在情况就像我只能编写2个小时的代码,而我必须找到6个小时才能解决此类不必要问题的解决方案。
罗伊·马修

44
在“订单和导出”选项卡中,我那里没有任何jar库,因此我没有选中任何Android Private Libraries项目。现在我的项目正在运行。
JuniorMayhé2014年

1
以我为例,我将其复制为“ android-support-v4.jar”。当我删除它时,错误消失了
ymerdrengene

94

清理掉工具先前版本中剩余的一些目录和文件后,我的问题得以解决。ADT修订版14更改了二进制文件的存储位置。我删除了整个bin目录,重新启动了Eclipse并清理了构建并强制进行了重新构建。最初似乎可以解决问题,但下一次运行后问题又回来了。

我终于发现我的bin目录包含在项目构建路径中。我从构建路径中排除了bin,并重复了上述步骤。这解决了我的问题。


42
到底是什么Google。即使使用R15,此问题也不断出现。
特里

2
我编辑了上面的解决方案,以包括最终解决方案。现在已永久解决。
特里

7
总之,没有人真正知道为什么这个问题会发生,什么意思以及如何修复它(我没有在Java构建路径任何bin目录)。由于这些原因,我避免升级到R15,而是继续使用R9。但是我仍然遇到类似的问题,看不到任何线索。任何提示或帮助将不胜感激。
Bill The Ape 2012年

6
@BillTheApe-同意。这是令人沮丧的,而且代价高昂。
汤姆·雷德曼

@TRedman我终于设法解决了这个问题。不知道为什么。不要笑 哈哈+1。
Bill The Ape 2012年

50

[为我解决]

Eclipse项目属性-> Java构建路径->订购和导出

取消选中Android私有库。


4
对我的情况没有帮助
redux

1
谢谢

46

以上均无济于事。最终这是一个简单的问题。

我有一个使用FacebookSDK和ViewPagerIndicator作为图书馆项目的项目。所有这些都是基于Android API 16构建的,并且这两个项目都使用了android支持库vX(X不是16!)

我向这两个项目添加了一个外部JAR,并将其指向\ extras \ android \ v4 ...,还删除了我在其libs文件夹中的v4 jar。

清理所有项目并重新构建。

瞧!

我收到的确切错误是:无法执行dex:多个dex文件定义了Landroid / support / v4 / view / PagerAdapter;转换为Dalvik格式失败:无法执行dex:多个dex文件定义了Landroid / support / v4 / view / PagerAdapter;


36

这个问题正在发生,我在我的libs文件夹中有一个外部.jar名为gson-2.2.2.jar,但由于某些原因,其中有两个,即gson-2.2.2.jar和gson-2.2.2.jar( 1),我只是删除了后者,并且我的项目再次构建良好。


2
当libs文件夹中有旧的jar文件并将其链接到同一工作空间中的较新的jar时,我遇到了类似的问题。当ADT为同一符号找到多个定义时,会出现这样的错误。删除libs文件夹中的旧jar文件对我来说是固定的。
phyatt

外部jar是导致问题的原因之一,在我的情况下也是如此。我/libs之前的实验中只剩下一个剩余的jar,这导致了Library Project和从中生成的.jar。删除该jar即可/libs解决问题。+1
ripopenid 2013年

31
  1. 接近月食。
  2. 删除项目文件夹中的bin文件夹。
  3. 开始蚀并清理您的项目。
  4. 现在运行,问题应该消失了

Mateus Viccari的答案解决了我的问题,我删除了重复的库,它的作用就像是魅力
。.– swiftBoy

为我工作。manifest file如果被eclipse从bin目录中删除,请手动添加它并再次清理项目。
Mehul Joisar

为我工作。还要确保您在两个不同的地方没有相同的.jar(在我的情况下,我在一个库项目和一个引用该库项目的项目中都拥有它。似乎Eclipse由于某种原因刚刚添加了它)
Magnus W

对我来说,我只是清理了整个工作区。仅仅清理项目是不够的。我相信我的问题与在干净的操作过程
中将

对我的情况没有帮助
redux

26

正如其他人提到的那样,当您在构建路径中有多个相同类的副本时,就会发生这种情况-在类路径中包含bin /是保证此问题的一种方法。

对我来说,这是在我将android-support-v4.jar添加到我的libs /文件夹时发生的,而eclipse以某种方式将第二个副本添加到bin / classes / android-support-v4.jar。

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

您可以使用

grep -r YourOffendingClassName YourApp | grep jar


23

对我来说,我只需右键单击项目->构建路径->配置构建路径->库->删除依赖项

在工作之后。


20

如果您有两个包含相同类名的jar,则可能发生此错误,例如,我有两个库:jsr311-api-1.1.1.jar和jersey-core-1.17.1.jar,它们都包含类javax.ws .rs.ApplicationPath。我删除了jsr311-api-1.1.1.jar,它工作正常。


1
这对我来说是完美的解决方案。我两次添加相同的库。谢谢。
swiftBoy

19

facebooksdk.jar添加到已经依赖于android-support-v4.jar的项目后,出现此错误。由于facebooksdk.jar已包含其自己的android-support-v4.jar,因此存在冲突。从项目Properties / Java Build Path / Libraries中删除较早的android-support-v4.jar为我解决了这个问题。


18

转到项目/属性和Java 构建路径,并取消选中Android的私人图书馆

这也是这种错误的另一种情况

完成了


15

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

编辑:忽略它。我的maven依赖项和libs文件夹中有相同的jar。我在lib文件夹中删除了一个。


2
从构建路径中删除Android依赖关系破坏了我的项目。幸运的是,通过右键单击项目> Android工具>修复项目属性,可以轻松还原。
azdev

在某些情况下,删除android依赖项并重新生成它可以解决一些问题。但是,正如我的编辑中那样,情况并非如此。
哈迪托克(Hadi Tok)2013年

9

您可能已经安装了r14,此错误可能是由于平台工具更新引起的,因此必须重新安装sdk


我只是完全吹走了我的SDK,并从下载的zip文件中重新安装了它,然后使用Android SDK Manager加载了Android API。我寄予厚望,但问题仍然存在。
特里

Windows中有一个.android隐藏文件夹,您也应该删除它。
里诺

存在相同的问题
McLan 2014年

9

对我来说,这个问题仅在我的项目中涉及Android库项目时才存在。因此,当我删除所有库并按照您所说的去做时,我可以再次运行我的应用程序。如果涉及到库,那么即使是bin-remove-trick技巧也不会起作用。

我不知道为什么这个错误今天开始第一次出现,因为我已经使用ADT 14了几天。嗯,还有其他一些让我高兴的错误。


许多解决方案看起来像是一些巫毒教徒... :)
Jasper 2015年


8

Project Explorer中选择项目,右键单击并选择Properties- > Java Build Path- > Source- >选中允许输出文件夹作为源文件夹的框


没帮助我的情况。
redux


7

我参加这个聚会很晚,但是增加了我自己的经验,以便以后再找:)

升级android sdk和eclipse广告插件后,我遇到了这个问题。没有升级会受到惩罚!

我的问题与库项目有关,我的应用程序同时引用了标准Java项目和android库项目。我注意到Java Build Path的设置在Source列表中包括了android库项目src和res文件夹(对每个在源代码中提到bin的人的投票,src和res也是一个问题。)

因此解决方案是:

  1. 从“源”列表和“项目”列表中的设置的“ Java构建路径”部分中删除所有引用的Android库源和项目引用
  2. 确保在项目列表中列出了纯Java依赖项,并在“顺序和导出”选项卡中选中了“已检查”,以便将类包含在apk中
  3. 确保所有Android库依赖项都列在项目属性的“ Android”部分中,位于选中的SDK版本下方的“库”部分中。

它正在将所有其他解决方案整合在一起!!


说得好!经过大量工作,我得出了相同的结论。我只是想补充一下,如果您的任何库项目包括其他库项目或纯Java依赖项,则必须全部以相同的方式添加它们,否则会出现此错误。如果您对所有项目都遵循上述规则,那么您应该不会有任何问题。
奇怪的

1
还有一件事...看来,如果您不需要导出项目或库项目的Android私有库,则不需要。如果有多个项目或库项目将其导出,则会收到多个dex文件错误。
strangeluck

6

当我从adt 14升级到15时遇到了这个问题,要使其正常工作,我最终只是删除了.eclipse文件夹(以及我的设置)并重新安装了adt 15。


6

在阅读了关于删除bin目录的Terrys响应以及关于ANT目录的位置的Larrys的响应之后:

我将位于项目BIN目录中的文件移动到BIN / CLASSES中,并开始运行。

编辑1然后第二次运行失败...

编辑2因此,关闭的Eclipse将文件移回到原始位置,并且所有文件都可以工作...嗯?我不知道这是为什么工作。如果有任何更改,将更新。

编辑3我从备份中注意到,在BIN目录和BIN / CLASSES中确实存在重复的文件。

因此,答案是:两个位置都没有文件。至少对我来说是有效的。


尝试减少以下答案:有用的结论,然后是事实。避免使用历史叙述AMAP;人们倾向于以为这不是“答案”而做出标记。
布罗克·亚当斯

为此而欢呼,感谢您为使我的
观点

6

修改您的eclipse.ini文件,并将最大内存参数设置为

-Xmx1024m

然后重新启动计算机。

它为我工作。


1
没有关系,提供更多的内存并不能解决依赖关系问题
Sierisimo 2015年

6

找到了我相信的解决方案??

    [2013-04-28 23:56:09 - Dex Loader] Unable to execute dex: Multiple dex files define Lcom/coremedia/iso/AbstractBoxParser$1;

它说:“ Lcom / coremedia / iso / AbstractBoxParser $ 1”恰好是我导入的引起问题的库的位置。寻找com.codemedia.iso.AbstractBoxParser $ 1.class和.AbstractBoxParser.class ....拿了那个罐子,解包了,删除了两个文件,然后重新打包为.zip,添加到库中,清理并工作了!没有更多的冲突给我!(也没有更新或其他下载)


6

我的libs文件夹中有Cordova .jar文件的两个不同版本,我删除了一个我什至没有使用过的版本,并且可以立即使用。很奇怪,因为我之前没有注意到它,它在以前就起作用了,然后突然停止了工作...



5

我的解决方案:

  1. 备份您的代码!
  2. 导航到您的项目工作区(而不是您的项目),然后运行以下命令:

    dev1:workspace $ cd〜/ Documents / workspace / .metadata / .plugins / dev1:workspace $ rm -rf org.eclipse.core.resources

  3. 导航到您的Eclipse目录并输入以下命令:

    dev1:eclipse $ ./eclipse清除

  4. Eclipse将以一个空的工作空间开始-不用担心您的项目仍然在那里。简单地使用现有资源创建新项目,事情应该很轻松。

我收到的确切错误:[2012-02-07 14 :15: 53-Dex Loader]无法执行dex:多个dex文件定义了Landroid / support / v4 / view / PagerAdapter;[2012-02-07 14:15:53-ProjectCloud]转换为Dalvik格式失败:无法执行dex:多个dex文件定义了Landroid / support / v4 / view / PagerAdapter;


5

我有几个库项目,它们在AndroidManifest中指定了相同的包名(因此R.java不会生成重复的字段名)。我必须从AndroidManifest.xml中删除所有库项目的所有权限和活动,以删除该错误,因此不会多次创建Manifest.java。希望这可以帮助某人。


4

在尝试了所有其他建议后,我没有运气,然后删除了项目“ bin”目录中的所有内容,然后再次运行了eclipse并成功了。


4

我将一个非图书馆项目转换为一个图书馆项目,但是它在libs文件夹中有一个以前构建的jar文件。删除此jar文件导致此错误消失。


4

我遇到了同样的问题,然后我在推送我的应用程序时看到了一些jar文件,该文件被加载了两次,因此出现了多个dex错误。只需转到您的项目属性-> Java Build Path,然后尝试取消选中要加载两次的jar。


4

[为我解决]

通过删除重复的库“ JAR文件”,然后删除BuildConfig.java文件,清理项目及其工作。

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.