"Преобразование в формат Dalvik не удалось с ошибкой 1" на внешнем JAR

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

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

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

71 ответ

Решение

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

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

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

smack.jar а также android_maps_lib-1.0.2

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

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

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

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

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

Решение для 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

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

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

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

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

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

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

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

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

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

Наконец, я нашел ответ здесь: https://groups.google.com/forum/

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

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

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

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

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

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

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

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

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

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

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

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

Мое собственное и единственное решение, которое я нашел сегодня после четырех часов тестирования всех решений, представляет собой комбинацию многих решений, представленных здесь:

  • Delete проект от Eclipse
  • Удалить файлы в \bin а также \gen из папки проекта
  • Удалить ссылки на библиотеки в .classpath файл в корневой папке проекта
  • Перезапустите Eclipse из командной строки: eclipse -clean
  • Import проект
  • Щелкните правой кнопкой мыши на проекте - выберите Properties > Java Build Path > Libraries и удалить все, кроме Android XX.Y
  • в заключение clean проект, дождитесь автоматического построения или Build Это
  • Запустите и теперь это работает! По крайней мере для меня...

Я пробовал каждый шаг за раз и много комбинаций, но только последовательность всех шагов сделала это одновременно! Я надеюсь, что я не буду сталкиваться с этим снова...

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

Это сделало библиотеку Android снова добавленной к моим ссылочным библиотекам, так что теперь у меня есть две ссылки на JAR-файлы Android, поэтому я удалил один из них, и теперь он прекрасно компилируется.

Решение. Удалите проект из Eclipse IDE, а затем повторно импортируйте его, а затем проверьте наличие вышеуказанных решений.

Я сам столкнулся с этой проблемой сегодня. Очистка и восстановление не решили проблему. Удаление и повторный импорт проекта также не помогли.

Я наконец отследил это до плохих дополнений к моему файлу.class. Я думаю, что это было добавлено инструментами плагина, когда я пытался исправить другую проблему, удалив ее, избавившись от ошибки сборки "Преобразование в формат Dalvik не удалось с ошибкой 1":

<classpathentry kind="lib" path="C:/dev/repository/android-sdk-windows/platforms/android-3/android.jar">
    <attributes>
        <attribute name="javadoc_location" value="file:/C:/dev/repository/android-sdk-windows/docs/reference"/>
    </attributes>
    <accessrules>
        <accessrule kind="nonaccessible" pattern="com/android/internal/**"/>
    </accessrules>

Для меня дополнительная ссылка JAR появилась в моем пути сборки. Я удалил это, и теперь это работает.

Моя проблема была вызвана ADT версии 12.0 и интеграцией ProGuard. Эта ошибка хорошо документирована, и решение находится в документации

Решение здесь

Командная строка ProGuard

Обновление Proguard до последней версии решило это для меня.

  • Мой путь был C:\Program Files (x86)\Android\android-sdk\tools\proguard\
  • Я скачал новую версию отсюда
  • и заменил обе папки bin и lib

СЛАВА БОГУ!

Я имел дело с этой проблемой при использовании библиотеки Sherlock ActionBar в моем проекте. Вы могли бы сделать следующий шаг, это работа для меня.

  1. Щелкните правой кнопкой мыши свой проект, выберите свойства.
  2. Появится диалоговое окно, выберите "Путь сборки Java" в левом меню.
  3. Удалите "Android зависимости" и "Android частные библиотеки" на правой панели, затем нажмите OK
  4. Очистите свой проект (выберите меню Проект -> Очистить)
  5. Щелкните правой кнопкой мыши свой проект, выберите "Инструменты Android" -> "Исправить свойства проекта".
  6. Очистите проект еще раз.
  7. Перезагрузите компьютер
  8. Откройте затмение и экспорт apk

Надеюсь, что это поможет вам.

В моем случае проблема на самом деле связана с проектом API OpenFeint. Я добавил OpenFeint как проект библиотеки:

,

Это также добавляется в путь сборки, ADT tools 16 выдает ошибку в этом сценарии.

Щелкните правой кнопкой мыши по вашему проекту и выберите путь сборки, настройте путь сборки, а затем просмотрите изображение и удалите ваш проект OpenFeint отсюда, и все готово:)

Я нашел что-то еще. Android использует /libs каталог для файлов JAR. Я неоднократно видел ошибку "Преобразование в формат Dalvik с ошибкой 1", всегда, когда я допускал ошибку в моих файлах JAR.

Теперь я обновил Roboguice до более новой версии, поместив новый файл JAR в /libs каталог и переключение пути к классу на новую версию. Это вызвало ошибку Dalvik.

Когда я удалил один из файлов JAR Roboguice из /libs папка, ошибка исчезла. Судя по всему, Android забирает все файлы JAR из /libsнезависимо от того, какие из них вы указали в пути сборки Java. Я точно не помню, но я думаю, что Android начал использовать /libs по умолчанию начиная с Android 4.0 (Ice Cream Sandwich, ICS).

В общем, кажется, что эта проблема возникает, когда в пути сборки есть ненужные файлы JAR.

Я столкнулся с этой проблемой, работая над IntelliJ IDEA. Для меня это произошло потому, что я добавил библиотеки JUnit и Mockito, которые компилировались во время выполнения. Это должно быть установлено на "тестирование" в свойствах модуля.

Ни одно из перечисленных решений не помогло мне.

Вот где у меня возникла проблема:

Я добавил внешний JAR-файл jSoup к пути моего проекта, сначала поместив его в исходную папку с именем "libs", а затем щелкнув правой кнопкой мыши по нему, Build Path -> add to build path. Это бросило ошибку преобразования Dalvik. Он сказал, что я "уже включил" класс из этого файла JAR. Я осмотрел каталог проекта и обнаружил, что место, где он был "уже включен", на самом деле bin каталог. Я удалил файл JAR из bin каталог и обновил проект в Eclipse и ошибка ушла!

Ни одно из ранее предложенных решений не сработало для меня. В моем случае проблема возникла, когда я переключился с ссылки на папку с исходным кодом библиотеки на файл библиотеки JAR. Изначально в разделе "Свойства приложения Android" в разделе "Свойства приложения Android" находился проект библиотеки Android, и библиотека также сравнивалась в дереве проводника проекта как ссылка на исходный каталог библиотеки.

Во-первых, я просто удалил ссылку на каталог из дерева проекта и добавил библиотеку JAR в путь сборки, но это вызвало исключение.

Правильная процедура была (после изменения пути сборки и возврата ссылки на источник библиотеки):

  • правильно удалите ссылку на исходный каталог библиотеки, фактически удалив ссылку из страницы проекта приложения Свойства \ Android

  • добавив JAR библиотеки в путь сборки проекта приложения, как обычно.

Я столкнулся с этой проблемой, потому что плагин Android-Maven в Eclipse, по-видимому, не распознавал переходные ссылки и ссылки, на которые дважды ссылались несколько проектов (включая проект библиотеки Android), и включал их несколько раз. Мне пришлось использовать фокус-покус, чтобы включить все только один раз, хотя Мэйвен должен был позаботиться обо всем этом.

Например, у меня была базовая библиотека globalmentor-core, которую также использовали globalmentor-google и globalmentor-android (последняя из которых - библиотека Android). В глобалментор-андроид pom.xml Я должен был отметить зависимость как "предоставленную", а также исключенную из других библиотек, в которые она была включена транзитивно:

    <dependency>
        <groupId>com.globalmentor</groupId>
        <artifactId>globalmentor-core</artifactId>
        <version>1.0-SNAPSHOT</version>
        <!-- android-maven-plugin can't seem to automatically keep this from being
             included twice; it must therefore be included manually (either explicitly
             or transitively) in dependent projects -->
        <scope>provided</scope>
    </dependency>

Тогда в финальной заявке pom.xml Мне пришлось использовать правильный трюк, чтобы разрешить только один путь включения - а также не включать явно библиотеку ядра:

    <!-- android-maven-plugin can't seem to automatically keep this from being
        included twice -->
    <!-- <dependency> -->
    <!-- <groupId>com.globalmentor</groupId> -->
    <!-- <artifactId>globalmentor-core</artifactId> -->
    <!-- <version>1.0-SNAPSHOT</version> -->
    <!-- </dependency> -->

    <dependency>
        <groupId>com.globalmentor</groupId>
        <artifactId>globalmentor-google</artifactId>
        <version>1.0-SNAPSHOT</version>
        <exclusions>
            <!-- android-maven-plugin can't seem to automatically keep this from
                being included twice -->
            <exclusion>
                <groupId>com.globalmentor</groupId>
                <artifactId>globalmentor-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.globalmentor</groupId>
        <artifactId>globalmentor-android</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

Я столкнулся с этой проблемой, но мое решение было двояким. 1.) Мне пришлось добавить целевую версию Android в разделе проекта -> свойства -> Android. 2.) У меня не было всех надстроек Google сторонних разработчиков. Нажмите в AVD SDK manager под доступными пакетами -> сторонние дополнения -> Google Inc. Я загрузил все SDK, и это решило мою проблему.

Часто для меня очистка проекта НЕ решает эту проблему.

Но закрытие проекта в Eclipse с последующим повторным открытием, похоже, исправляет его в этих случаях...

Все решения выше не сработали для меня. Я не использую какой-либо предварительно скомпилированный.jar. Я использую ошибки LVL и Dalvik, где все они связаны с библиотекой лицензирования рынка.

Проблема была решена путем удаления основного проекта и его повторного импорта (создание нового проекта из существующих источников).

У меня была такая же проблема, и ни одно из этих решений не сработало. Наконец, я увидел в консоли, что ошибка произошла из-за дублированного класса (один в существующем проекте, один в добавленном jar-файле):

java.lang.IllegalArgumentException: already added: package/MyClassclass;
[2011-01-19 14:54:05 - ...]: Dx1 error; aborting
[2011-01-19 14:54:05 - ...] Conversion to Dalvik format failed with error 1

Так что проверьте, добавляете ли вы jar с дублированными классами в ваш проект. Если да, попробуйте удалить один из них.

Это сработало для меня.

Просто очистите проект

Если это не работает, попробуйте другие решения

В моем случае

проект-> свойства-> путь сборки Java -> вкладка "Порядок и экспорт" -> снимите флажок android-support-v4.jar

Я использую Android 1.6 и имел один внешний файл JAR. Что мне помогло, так это удалить все библиотеки, щелкнуть правой кнопкой мыши по проекту и выбрать " Инструменты Android" -> "Исправить свойства проекта" (который вернул Android 1.6), а затем добавить внешний JAR-файл.

Другие вопросы по тегам