НЕОПРЕДЕЛЕННОЕ ТОПЛИВНОЕ ИСКЛЮЧЕНИЕ: java.lang.IllegalArgumentException: уже добавлено

Я новичок в 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 → Библиотеки для удаления всех библиотек, кроме Android x.y.z, затем Maven- > Update Project Configuration, также для очистки проекта;  - Магия с закрытием и повторным затмением;
 - Танцы с удалением и воссозданием проекта и библиотек для него (в соответствии с текстом сообщения об ошибке существует некоторое дублирование источников, которые находятся в одной из двух библиотек, используемых в основном проекте).

После одного из вариантов выше (обычно 1-го) он начинает работать, но я могу потратить 20 минут, чтобы заставить его работать или несколько часов..., сегодня я не могу этого сделать вообще.

Любая идея будет оценена.

Ответ 1

Ну, насколько я понимаю, главное здесь было в том, что я использовал maven в качестве инструмента построения. Я мог бы создавать и развертывать проект без каких-либо проблем, но я не мог запустить его из среды (eclipse).

Если я не ошибаюсь, когда вы идете в eclipse Run- > Run Configurations и создаете Android-приложение для запуска вашего проекта, вы в основном попросите eclipse (Android SDK) построить .apk с Ant для вас, а не с maven. Eclipse создает проект с помощью Ant и подталкивает сгенерированный .apk к устройству/симулятору. Но так как все настройки проекта находятся в файлах .pom, Ant не может построить проект и дает такие ошибки.

Решение:
Запустите приложение прямо с устройства/симулятора после его развертывания, а не через меню "Выполнить". Если вы хотите отлаживать ваше приложение, используйте отладку DDMS, а не одно затмение. Если вы не знаете, где DDMS (как и я в моем случае) - в Mac, это Window- > Open Perspective- > Other... выберите DDMS из меню; вы можете поместить его как закладку вместе с eclipse Debug и Java. В DDMS вы найдете все классные инструменты, в том числе отладки.

P.S. Это ответ от новичка и начинающих... Если вы видите что-то, в чем я ошибаюсь, пожалуйста, сообщите мне или не стесняйтесь редактировать мой ответ.

Ответ 2

ADT выдаст такое исключение, если ваш путь класса Eclipse содержит более одного класса с тем же именем/пакетом. В этом случае в ваших зависимостях Maven встречается более одного экземпляра класса AvailabilityRequest.

Вы можете решить эту проблему, указав, какие зависимости в classpath содержат одни и те же файлы классов в них (нажатие Ctrl-Alt-T и ввод в AccessRequest сделают это).

Затем вы можете открыть POM в редакторе m2m POM и перейти на вкладку Иерархия зависимостей. Это позволит вам выбрать постороннюю зависимость, которую вы затем можете исключить, щелкнув правой кнопкой мыши и выбрав "Исключить Maven Artifact...", который автоматически добавит элемент <exclusions> к вашему POM. Это приведет к удалению дубликата JAR из класса Eclipse и позволит вам создать проект.

Кроме того, вы должны быть осторожны с тем, какие зависимости вы добавляете к своей POM.