【问题标题】:UNEXPECTED TOP-LEVEL EXCEPTION: java.lang.IllegalArgumentException: already added意外的顶级异常:java.lang.IllegalArgumentException:已添加
【发布时间】:2012-02-28 03:47:13
【问题描述】:

我是 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 - 日食 3.7.1
ADT - 版本:15.0.1.v201111031820-219398
构建工具 - Maven

到目前为止我已经尝试过:
- Properties->Java Build Path->Libraries 删除除 Android x.y.z 之外的所有库,然后 Maven->Update Project Configuration,也可以清理项目;
- 关闭和重新打开 Eclipse 的魔法;
- 删除和重新创建项目及其库(根据错误消息的文本,存在一些重复的源,它们位于主项目中使用的 2 个库之一中)。

在上述变体之一(通常是第一个变体)之后,它开始工作,但我可以花 20 分钟或几个小时让它工作......,今天我根本无法做到。

任何想法都将不胜感激。

【问题讨论】:

标签: android eclipse macos maven dalvik


【解决方案1】:

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

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

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

此外,您应该小心添加到 POM 中的依赖项。

【讨论】:

  • Ricardo,感谢您的支持 (+1),我没有找到解决方案,但我找到了解决方法:它允许我调试应用程序,这是所有这些的目的.
【解决方案2】:

嗯,据我所知,这里主要是我使用 ma​​ven 作为构建工具。我可以毫无问题地构建和部署项目,但我无法从环境(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 中,您会找到所有很棒的工具,包括调试。

附:这是来自初学者和初学者的回应...如果您发现我错了,请告诉我或随时编辑我的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 2015-08-29
    • 1970-01-01
    相关资源
    最近更新 更多