意外的顶级异常:java.lang.IllegalArgumentException: 已经添加

10

我是Android开发的新手,尝试启动一个已经成功构建和部署的项目。但是每次我试图从Eclipse启动应用程序时,都会出现以下错误:

UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.IllegalArgumentException: already added: Lcom/.../model/AvailabilityRequest$DAY_TIME_PREFERENCE;
[2012-02-06 17:32:11 - main-app] Dx     at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)
[2012-02-06 17:32:11 - main-app] Dx     at com.android.dx.dex.file.DexFile.add(DexFile.java:163)
[2012-02-06 17:32:11 - main-app] Dx     at com.android.dx.command.dexer.Main.processClass(Main.java:486)
...
[2012-02-06 17:32:11 - main-app] Dx     at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
[2012-02-06 17:32:11 - main-app] Dx 1 error; aborting
[2012-02-06 17:32:11 - main-app] Conversion to Dalvik format failed with error 1
我为这个愚蠢的问题浪费了大量的时间。 显然,这是一个已知的问题,但对我来说没有任何作用。 我有: 操作系统 - OS X,我认为这很重要; IDE - Eclipse 3.7.1; ADT - 版本:15.0.1.v201111031820-219398; 构建工具 - Maven。
到目前为止我尝试过: - 属性-> Java Build Path->库,除了Android x.y.z之外删除所有库,然后使用Maven->更新项目配置,还清理了项目; - 关闭和重新打开Eclipse的魔法; - 删除和重新创建项目及其库(根据错误消息的文本,在主项目中使用的2个库之一中存在源代码的重复)。
在上述某个变体之后(通常是第一个),它开始工作了,但我可能会花费20分钟或几个小时来使其正常工作......今天我根本无法管理它。
任何想法都将不胜感激。

发现了这个:http://code.google.com/p/android/issues/detail?id=20398#c22 似乎与此有关。 - makaron
如果是这样,您可能需要编辑您的问题以使其更加清晰明了。 - Ricardo Gladwell
谢谢回复,Ricardo。是的,我使用“M2E - Maven Integration for Eclipse”。我应该在问题中添加什么? - makaron
抱歉,我是指m2e的m2e-android扩展:http://rgladwell.github.com/m2e-android/ - Ricardo Gladwell
2个回答

6
如果你的Eclipse类路径包含同名/同包的多个类,则ADT会抛出此类异常。在这种情况下,它遇到了你的Maven依赖项中多个AvailabilityRequest类的实例。
你可以通过查找哪些类路径依赖项包含相同的类文件来解决此问题(按下Ctrl-Alt-T并键入AvailabilityRequest即可)。
然后,你可以在m2e POM编辑器中打开你的POM,并转到“Dependency Hierarchy”选项卡。这将允许你选择多余的依赖项,然后通过右键单击并选择“Exclude Maven Artifact...”来排除它,这将自动向你的POM添加一个<exclusions>元素。这将从你的Eclipse类路径中删除重复的JAR文件,并允许你构建项目。
另外,你应该注意你添加到POM中的依赖项。

1
Ricardo,感谢您的支持(+1),虽然我没有找到解决方案,但我找到了一个变通方法:它允许我调试应用程序,这正是所有这一切的目的。 - makaron

3
据我所知,主要问题是我使用的是 maven 作为构建工具。我可以构建和部署项目,但无法从环境 (eclipse) 启动它。
如果没错的话,当你进入 eclipse 的 Run->Run Configurations 并创建一个 Android Application 来启动你的项目时,基本上是在请求 eclipse (Android SDK) 使用 Ant 为你构建 .apk 文件,而不是使用 maven。Eclipse 使用 Ant 构建项目并将生成的 .apk 推送到设备/模拟器上。但由于项目所有设置都在 .pom 文件中,Ant 无法构建该项目并会出现这种错误。 解决方案:
在部署应用程序后直接从设备/模拟器启动您的应用程序,而不是通过 Run 菜单启动。 如果要调试您的应用程序,请使用 DDMS 的调试功能,而不是 eclipse 提供的调试功能。 如果您不知道 DDMS 在哪里(就像我一样),在 Mac 中,它位于 Window->Open Perspective->Other...,选择菜单中的 DDMS;您可以将其与 eclipse 的 DebugJava 一起设置为书签。在 DDMS 中,您将找到所有很酷的工具,包括调试。
P.S. 这是一个初学者的回答,也是为初学者准备的... 如果您看到我写错的地方,请告诉我或随意编辑我的答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接