«Преобразование в формат Dalvik не удалось с ошибкой 1» на внешнем JAR - PullRequest
902 голосов
/ 21 апреля 2010

В моем приложении Android в Eclipse я получаю следующую ошибку.

НЕОЖИДАННОЕ ИСКЛЮЧЕНИЕ ТОП-УРОВНЯ:
java.lang.IllegalArgumentException: уже добавлено: Lorg / xmlpull / v1 / XmlPullParser;
....
Преобразование в формат Dalvik завершилось ошибкой 1

Эта ошибка появляется только тогда, когда я добавляю определенный внешний файл JAR в свой проект. Я долго искал возможное решение, но ни одно из возможных решений не сработало. Я даже пытался перейти на Android 1.6 вместо 1.5 (текущая версия, которую я использую).

Ответы [ 71 ]

825 голосов
/ 02 августа 2010

Зайдите в Проект »Свойства» Путь сборки Java »Библиотеки и удалите все, кроме« Android X.Y »(в моем случае Android 1.5). нажмите ОК Перейдите в Проект »Очистить» Очистить проекты, выбранные ниже »выберите свой проект и нажмите ОК. Это должно работать.

Также возможно, что у вас есть файл JAR, расположенный где-то в папках вашего проекта (я скопировал файл JAR Admob в мою папку src), и ТОГДА добавил его как библиотеку путей Java. Он не отображается в проводнике пакетов, поэтому вы его не замечаете, но он учитывается дважды, что вызывает страшную ошибку Dalvik 1.

Другой возможной причиной могут быть конфликты имен пакетов. Предположим, у вас есть пакет com.abc.xyz и класс с именем A.java внутри этого пакета, а также другой библиотечный проект (который добавляется в зависимость этого проекта), содержащий тот же com.abc.xyz.A.java, тогда вы получите точно такой же ошибка. Это означает, что у вас есть несколько ссылок на один и тот же файл A.java и вы не можете его правильно построить.

Другими способами это может произойти, если вы случайно или сознательно отредактировали / добавили что-либо в файл пути к классам вручную. В некоторых случаях мы можем вручную добавить путь android.jar в файл пути к классам для генерации документа Java. после того, как сгенерированный javadoc код будет работать нормально. Пожалуйста, проверьте это также, если какой-либо еще происходит.

271 голосов
/ 21 апреля 2010

Я решил проблему.

Это конфликт файлов JAR.

Кажется, у меня есть два JAR-файла на моем пути сборки, которые включают в себя один и тот же пакет и классы.

smack.jar и android_maps_lib-1.0.2

Удаление этого пакета из одного из файлов JAR решило проблему.

126 голосов
/ 10 августа 2011

Решение для Windows 7:

Подтверждено, что проблема вызвана командной строкой ProGuard в файле
[Каталог установки Android SDK] \ tools \ proguard \ bin \ proguard.bat

Отредактируйте следующую строку, чтобы решить проблему:

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %*

до

call %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9
95 голосов
/ 28 августа 2013

Вы можете легко решить эту проблему (с помощью Eclipse Android Developer Tools, Build: v22.0.1-685705), отключив меню> «Проект»> «Автоматически создавать» при экспорте (не) подписанного приложения Android. После этого не забудьте включить его снова.

53 голосов
/ 12 сентября 2011

Если у вас ADT версии 12+, вы должны обновить Proguard с 4.4 -> 4.6 (как описано здесь ). Кроме того, вы должны оставить файл ... \ bin \ proguard.bat в оригинальной форме.

Просто скачайте его из Интернета и скопируйте папку lib из загруженного пакета в:

[Каталог установки Android SDK] \ tools \ proguard \ lib

40 голосов
/ 26 июня 2013

РЕДАКТИРОВАТЬ (новое решение):

Похоже, что предыдущее решение - только обход. Мне удалось окончательно решить проблему навсегда: В моем случае было несоответствие в файлах android-support-v4 в моем проекте и в проекте Facebook, на который есть ссылка в моем проекте.

Я обнаружил эту ошибку, выполнив проверку Lint (Инструменты Android / Run Lint: проверка на наличие общих ошибок)

Мое предыдущее решение:

Я пробовал любое возможное решение на этом сайте - ничего не помогло !!!

Наконец-то я нашел ответ здесь: https://groups.google.com/forum/#!topic/actionbarsherlock/drzI7pEvKd4

Простые шаги:

Перейти к проекту -> снять флажок Автоматически строить

Перейдите в Project -> Clean ..., очистите как библиотечный проект, так и ваш проект приложения

Экспортируйте ваше приложение как подписанный APK, пока автоматическая сборка еще инвалидов

30 голосов
/ 12 ноября 2011

Вот еще один сценарий и решение:

Если вы столкнулись с этой проблемой недавно после обновления ADT для Eclipse:

  1. В вашем проекте приложения проверьте наличие любых связанных исходных папок, указывающих на ваши библиотечные проекты (они имеют имена в форме "LibraryName_src").
  2. Выберите все эти проекты, щелкните правой кнопкой мыши, выберите « Путь сборки » -> « Удалить из пути сборки ».
  3. Выберите « Также отсоедините папку от проекта » и нажмите « Да ».
  4. Очистить, перестроить и заново развернуть проект.

Кажется, причина в том, что некоторые предыдущие версии ADT связывали исходные папки проектов библиотеки с «дочерними» проектами, и текущая комбинация ADT / Dex больше не совместима с этим решением.

РЕДАКТИРОВАТЬ: это подтверждается записью в блоге разработчиков Android, в частности , этой - см. Восьмой абзац.

29 голосов
/ 18 сентября 2014

Перейдите в Project и снимите флажок «Автоматически строить». Затем попытайтесь экспортировать проект, и ошибка исчезнет.

27 голосов
/ 20 июня 2011

Это также может быть вызвано тем, что вы добавили файл Android.jar в путь сборки, возможно, из-за случайного быстрого исправления в Eclipse. Удалите его, щелкнув правой кнопкой мыши Проект -> Путь сборки -> Настройка пути сборки -> android.jar , удалить.

25 голосов
/ 09 декабря 2010

Просто очистка проекта работала для меня каждый раз, когда появлялась эта ошибка.

...