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

时间:2012-02-06 17:02:07

标签: android eclipse macos maven dalvik

我是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

到目前为止我尝试了什么:
  - Properties-> Java Build Path-> Libraries删除除Android x.y.z之外的所有库,然后删除Maven-> Update Project Configuration,以清除项目;
  - 关闭和重新开启日食的魔法;
  - 与删除和重新创建项目及其库共享(根据错误消息的文本,在主项目中使用的2个库之一中存在一些源的重复)。

经过上述其中一个变种(通常是第一个变种)后,它开始工作,但我可以花20分钟使其工作或几个小时......,今天我根本无法完成任务。

任何想法都会受到赞赏。

2 个答案:

答案 0 :(得分:6)

如果您的Eclipse类路径包含多个具有相同名称/包的类,则ADT将抛出这样的异常。在这种情况下,它会在Maven依赖项中遇到多个AvailabilityRequest类的实例。

您可以通过查找哪些类路径依赖项包含相同的类文件来解决此问题(按Ctrl-Alt-T并输入AvailabilityRequest将执行此操作)。

然后,您可以在m2e POM编辑器中打开POM,然后转到“依赖关系层次”选项卡。这将允许您选择无关的依赖关系,然后可以通过右键单击并选择“Exclude Maven Artifact ...”来排除该关联,这将自动向您的POM添加<exclusions>元素。这将从Eclipse类路径中删除重复的JAR,并允许您构建项目。

此外,您应该注意添加到POM的依赖项。

答案 1 :(得分:3)

嗯,据我所知,这里的主要内容是我使用 maven 作为构建工具。我可以毫无问题地构建和部署项目,但我无法从环境(eclipse)启动它。

如果我没错,当你去eclipse的运行 - >运行配置并创建一个 Android应用程序来启动你的项目时,你基本上会问eclipse( Android SDK)为您构建带有 Ant 的.apk,而不是maven。 Eclipse使用Ant构建项目,并将生成的.apk推送到设备/模拟器。但由于项目的所有设置都在 .pom 文件中,因此Ant无法构建项目并提供此类错误。

<强>解决方案:
在部署之后,直接从设备/模拟器启动应用程序,而不是通过运行菜单。 如果你想调试你的应用程序,请使用DDMS'debug,而不是eclipse提供的那个。 如果您不知道DDMS在哪里(就像我的情况一样) - 在 Mac 中它是 Window-&gt; Open Perspective-&gt; Other ... 选择DDMS从菜单;您可以将它与eclipse的 Debug Java 一起作为书签。在DDMS中,您将找到所有很酷的工具,包括debug。

P.S。这是初学者和初学者的回应...如果你看到我错了,请告诉我或随意编辑我的答案。