我是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分钟使其工作或几个小时......,今天我根本无法完成任务。
任何想法都会受到赞赏。
答案 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。这是初学者和初学者的回应...如果你看到我错了,请告诉我或随意编辑我的答案。