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

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

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

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

Ответы

Ответ 1

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

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

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

smack.jar и android_maps_lib-1.0.2

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

Ответ 2

Перейдите в Project "Properties" Java Build Path "Библиотеки и удалите все, кроме" Android X.Y "(в моем случае Android 1.5). нажмите "ОК". Перейдите в Project" Clean "Чистые проекты, выбранные ниже" выберите ваш проект и нажмите "ОК". Это должно работать.

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

EDIT (новое решение):

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

Я нашел эту ошибку, выполнив Lint Check (Android Tools/Run Lint: Check for Common Errors)

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

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

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

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

Перейдите в Project → снимите флажок Build Automatically

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

Экспортируйте приложение как подписанный APK, пока Build Automatically по-прежнему инвалиды

Ответ 7

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

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

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

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

EDIT: это подтверждается записью Android Dev Blog, в частности этот - см. восьмой абзац вперед.

Ответ 8

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

Ответ 9

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

Ответ 10

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

Ответ 11

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

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

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

Ответ 12

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

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

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

Ответ 13

Иди в эту проблему сегодня. Очистка и восстановление не устранили проблему. Удаление и реимпорт проекта не помогло.

Я, наконец, проследил его до плохих дополнений к моему .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>

Ответ 14

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

Ответ 15

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

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

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

Ответ 16

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

  • Щелкните правой кнопкой мыши на свой проект и выберите свойства.
  • Появится диалоговое окно, выберите "Java build path" в меню слева.
  • Удалите "Android-зависимости" и "частные библиотеки Android" на правой панели, затем нажмите "ОК"
  • Очистите проект (выберите меню Project → Clean)
  • Щелкните правой кнопкой мыши свой проект, выберите "Инструменты Android" → "Исправить свойства проекта"
  • Очистите проект еще раз.
  • Перезагрузите компьютер.
  • Открыть eclipse и Export apk

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

Ответ 17

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

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

СПАСИБО БОГ!

Ответ 18

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

library project]![1]![Enter image description here.

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

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

Enter image description here

Ответ 19

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

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

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

Ответ 20

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

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

Ответ 21

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

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

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

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

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

Ответ 22

Ни один из перечисленных решений не работал у меня.

Здесь у меня возникла проблема:

Я добавил внешний JAR файл jSoup в свой путь к проекту, сначала поместив его в исходную папку с именем "libs", а затем щелкнув правой кнопкой мыши по нему, "Путь сборки" → добавить путь сборки. Это привело к ошибке преобразования Dalvik. Он сказал, что я уже "включил" класс из этого JAR файла. Я просмотрел каталог проекта и обнаружил, что место, где оно было "уже включено", фактически было каталогом bin. Я удалил JAR файл из каталога bin и обновил проект в Eclipse, и ошибка исчезла!

Ответ 23

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

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

Ответ 24

У меня была та же проблема, и ни одно из этих решений не работало. Наконец, я увидел на консоли, что ошибка была вызвана дублированным классом (один в существующем проекте, один в добавленном файле 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 дублированные классы в своем проекте. Если да, попробуйте удалить один из них.

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

Ответ 25

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

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

Ответ 26

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

Ответ 27

Я использую Android 1.6 и имел один внешний JAR файл. Что сработало для меня, так это удалить все библиотеки, щелкнуть правой кнопкой мыши проект и выбрать Android Tools → * Fix Project Properties (который добавил Android 1.6), а затем добавить обратно внешний JAR файл.

Ответ 28

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

Например, у меня было базовое ядро ​​globalmentor-core, которое также использовалось глобально-google и globalmentor-android (последним из которых является Android-библиотека). В globalmentor-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>

Ответ 29

В моем случае

project- > properties- > java build path → вкладка export и export → снимите флажок android-support-v4.jar

Ответ 30

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

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