Невозможно выполнить dex: несколько файлов dex определяют

125

Я знаю, что этот вопрос задавали здесь несколько раз раньше. Но я еще не видел никакого возможного решения. Прежде чем я сделаю проект «Запуск от имени Android-приложения», если я не буду его очищать, я получаю следующую ошибку, и мне нужно перезапустить Eclipse ... и снова очистить.

Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define
     Lcom/jstun/core/attribute/MessageAttributeInterface;

com.jstun.core ... является частью моей папки src, конечно, я не могу его удалить. И даже если я удалю этот пакет, другой пакет будет отображаться как ошибка, например:

Unable to execute dex: Multiple dex files define
     Landroid/support/v4/app/ActivityCompatHoneycomb;

Я видел эту ошибку с момента обновления до ADT 15, я использую Eclipse Galileo в Ubuntu. У вас есть идеи? Спасибо за любой ответ!

Тран Нгу Данг
источник
Я перепробовал почти все в этой теме, но ничего не вышло. Я решил проблему, удалив проект, затем создал новый и скопировал вставку исходных файлов из резервной копии.
linuxjava
обратитесь к этому. stackoverflow.com/questions/34415101/…
Стив
Посмотрите мой ответ по следующей ссылке. stackoverflow.com/a/38391449/3702595
Саттар Хумматли

Ответы:

136

Это проблема пути сборки.

  • Убедитесь, что ваша папка bin не включена в ваш путь сборки.

  • Щелкните правой кнопкой мыши свой проект -> перейдите к свойствам -> Путь сборки.

  • Убедитесь, что библиотека Honeycomb находится в вашей libs/папке, а не в исходной папке.

  • Включите библиотеки по libs/отдельности в путь сборки.

    Кстати, вы можете добавить android-support-v4библиотеку для поддержки Ice Cream Sandwich вместо библиотеки поддержки Honeycomb.

Терри
источник
50
Эта проблема также возникает, если у вас есть несколько версий библиотек, физически включенных в ваш путь сборки. Удаление неиспользуемых библиотек из libsпути, очистка и сохранение проекта, перезапуск Eclipse и повторная компиляция его снова работают для меня.
Aryo
Исключение папки bin из пути сборки решило это для меня. Спасибо!
alekop
2
Основная причина проблемы заключалась в том, что одна из библиотек использовала библиотеку nineoldandroid в качестве jar-файла, хранящегося в каталоге ./libs, в то время как другой проект использовал nineoldandroid, ссылаясь на него
Deepika Lalra
Это также может произойти, когда у вас есть что-то вроде Foo.javaв упаковке и Foo.javaв банкеlibs/
tricknology
Эта ошибка возникает, когда папка вашего проекта находится на Google Диске. Я думаю, что это ошибки, когда Диск синхронизируется. По крайней мере, для меня
ymerdrengene
58

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

Подробнее: Мое приложение зависит от двух библиотечных проектов.

  • FaceBookSDK 3.0 -> ссылающийся на android-support-v4
  • ActionBarSherlock ->, который ссылается на android-support-v4, но с измененной версией для поддержки карт.

Чтобы решить эту проблему, мне пришлось сделать библиотеку FaceBookSDK зависимой от библиотеки ABS, а не напрямую от библиотеки поддержки.

M.Sameer
источник
Да, моя проблема была похожей. В двух библиотеках была библиотека httpmime, поэтому я удалил одну и указал на другой проект.
Мэтт
10
Кто-нибудь из вас может объяснить, как именно вы это сделали?
Samih A,
3
@samih в примере, который я упомянул, сначала я удалил jar-файл android-support-v4 из папки lib проекта FaceBookSDK и пути сборки. Затем я добавил ссылку на проект библиотеки ActionBarSherlock.
M.Sameer
для меня оказалось, что другой разработчик добавил новую версию файла jar библиотеки, не удаляя старую. Итак, было две банки с одинаковыми классами. Таким образом возникает ошибка «Несколько файлов dex ...» Вы можете выполнить команду grep -r 'OffendingClassName' | grep jar $ для поиска файлов jar, содержащих имя класса.
bibstha
Похоже, но я случайно добавил android-support-v4.jarв оба пути сборки Eclipse и добавил его вручную в libsсозданную мной папку. Из-за повторяющихся ссылок я не смог скомпилировать (и получил сообщение об ошибке, полученное OP). Я удалил libsтупо созданную папку и все заработало. Спасибо за подсказку.
kurtzbot
47

Что ж, я удалил файл в папке libs под названием android support v4.jar, и все сработало. Удачи :)

akemalFirdaus
источник
1
Для меня это был файл поддержки android v4.jar (1) .jar. Я просто удалил его и очистил проект!
ymerdrengene
33

У меня была такая же ошибка, и каждый раз, когда я ее исправлял, она возвращалась после перезапуска Eclipse.

Прежде всего, как говорили другие, убедитесь, что у вас нет нескольких копий одного и того же файла .jar вокруг ваших проектов.

В моем случае у меня был основной проект, который использовал ActionBarSherlock (среди других библиотечных проектов). Уловка, которая сработала для меня, заключалась в ActionBarSherlock --> Properties --> Java Build path --> Order of Exportснятии выделения Android Private Libraries. Затем войдите, Project -> Cleanи теперь вы сможете правильно построить проект.

Теперь по какой-то причине каждый раз, когда я перезапускаю Eclipse, он автоматически включает этот флажок, поэтому мне приходится повторять этот процесс снова.

Надеюсь, это поможет какой-то заблудшей душе :)

Henrique
источник
32

Перейдите в Project / properties и Java Built Path и снимите флажок с Android Private Libraries.

Правин Бхосале
источник
1
Исправлена ​​и моя проблема!
Totic
Но это останавливает работу gcm.jar, как заставить его работать без этой ошибки?
Нарендра Сингх
У меня была ошибка: несколько dex Lcom / google / android / gms / analytics / internal / Command $ 1. Получил после обновления google play до 22.1.1. Отмена выбора частных библиотек внутри проекта Google Play устранила ошибку
Евгений
Вы спасли мою жизнь! Спасибо ~
Leo Hsieh
15

Для меня просто перейдите в Свойства проекта >> Путь сборки Java >> Порядок и экспорт. Снимите флажок со всех внешних библиотек, как показано на изображении ниже. Это работает для меня. Надеюсь на эту помощь.

Свойства проекта

Хоа Хоанг
источник
это было проблемой для меня
Пиюш-Спроси любую разницу
8

Я тоже столкнулся с этой проблемой в своем проекте. AVD не может перезагружать контексты папок assets, lib, res и т. Д. проблема: Dex Loader] Невозможно выполнить dex: определение нескольких файлов dex Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl.

Затем я создал новые проекты и скопированный MainActivity.java, activity_main.xml, рисует контекст. Затем удалите старый проект из пакета explore, перезапустите Eclipse и AVD. Мой проект теперь работает правильно .... :) Надеюсь, эти шаги помогут вам, ребята ... !!

сатья
источник
8

У меня такая же проблема, я пробовал:

  1. Элемент списка
  2. Открыть путь сборки проекта,
  3. Выберите вкладку «Библиотеки»,
  4. Удалите всю библиотеку, кроме библиотеки Android.
  5. Добавление всех необходимых файлов JAR,
  6. Готово!

У меня работает, спасибо.

Феди Веном
источник
да, я сделал то же самое. удалил все файлы jar, добавил обратно. в порядке и экспорте, отключил зависимости и проверил все библиотеки, добавленные только что
Маулик Шет
6

Если некоторые из вас столкнулись с этой проблемой с плагином facebook-connent-plugin для телефонной связи

попробуйте удалить файлы в каталоге bin / class / com / facebook / android! -> и перестроить

Самих А
источник
Это правильный ответ. Пояснение ---- facebook.android включен дважды. Один раз в facebookSDK.jar, который включен в ваш проект, и когда файлы java напрямую включены в ваш проект. удаление его из вашего проекта - чистый способ сделать это. все остальные ответы - это просто обходные пути, которые не будут экспортировать определение или что-то в этом роде ....
Сандип Танеха
6

Как уже упоминалось, это происходит, когда у вас есть несколько копий одного и того же класса в вашем пути сборки или в другом месте вашей установки.

Я добавил android-support-v4.jar в свою папку libs /, и каким-то образом eclipse добавил вторую копию в bin / classes / android-support-v4.jar.

Вы можете проверить это с помощью

grep -r YourOffendingClassName YourApp | grep jar

Удаление дополнительной копии в bin / classes решило проблему - не знаю, почему Eclipse сделал копию там.

chaqke
источник
1
Я пробовал все другие варианты, перечисленные здесь, но это был тот, который решил проблему для меня! :) И да, Eclipse должен умереть, и Android Studio должна получить свою версию 1.0 - тогда мир стал бы лучше.
Йохан Пол
5

Я получил эту ошибку по другой причине. Я ошибался при добавлении библиотеки поддержки v4 и v13. Мне в этом не было необходимости, так как моя minSdkVersion - 15.

Я исправил это, включив только библиотеку поддержки v13. Кроме того, не забудьте отметить библиотеку в пути сборки экспортированной библиотеки в eclipse. Я тоже переместил его наверх.

Райан Р
источник
Это было то, что меня тоже достало. Библиотека поддержки v13 включает библиотеку поддержки v4, поэтому dex показывал несколько объявлений классов.
Kyle Falconer
4

Даже после нескольких ответов у меня не сработало ни одно решение.

Я удалил «Зависимости Android» из пути сборки. Снова добавлены все файлы jar в путь сборки, и ошибка исчезла. Каким-то образом затмение, казалось, кэшировало вещи.

JaydeepW
источник
3

Я оставляю этот ответ для тех, кто попадает в этот сценарий, как и я.

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

У меня была такая же ошибка, через некоторое время я обнаружил проблему и удалил ее. Теперь проект работает нормально.

kishu27
источник
3

Решение для меня было просто сделать следующие вещи:

  1. -> lib в вашем проекте и удалите все несколько элементов.
  2. Проект-> Свойства-> Путь сборки Java и удаление любой библиотеки зависимостей были добавлены автоматически, а не вами! -> Применить
  3. Перезапустите Eclipse IDE.
  4. Теперь очистите проект.
  5. Запустить / отладить на устройстве / эмуляторе проект ... Удачи
GuyN
источник
проблема все еще сохраняется
Ахил Джайн
2

Сначала моя проблема была:

Невозможно выполнить dex: java.nio.BufferOverflowException. Проверьте журнал Eclipse на предмет трассировки стека.

1) Я щелкаю правой кнопкой мыши свой проект -> Инструменты Android -> Добавить библиотеку поддержки (Запустить мое приложение ... Не сработало, поэтому я продолжаю ...) 2) Щелкните правой кнопкой мыши мой проект еще раз -> Свойства -> Android -> Проверьте Android 4.1.2 (16) на Project Build Target (запустите приложение еще раз ... и получите следующее:

Невозможно выполнить dex: несколько файлов dex определяют Landroid / support / v4 / app / BackStackState;

3) Так что я пошел в папку «Lib» на мой проект и удалить «старый» Android.support.library.jar (Запустить приложение и кросс пальцами и ...)

ОНО РАБОТАЕТ!

Надеюсь, это кому-то поможет ... Спасибо, народ!

Daros
источник
2

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

  • com.pack1.deи Class Geometryизlibrary1.jar

и другой

  • com.pack1.deи Class Geometryизlibrary2.jar.

Как вам подойти? Вы должны проанализировать, какие методы используются, метод library1.jar или library2.

Есть 2 решения,

  1. Переименуйте имя пакета, а затем dalvik интерпретирует, что это разные классы
  2. Или, если хотите рискнуть, очистите класс, в котором нет метода, который мы действительно используем.

Я надеюсь, что это прояснило этот часто задаваемый вопрос.

Глубокий конец
источник
2

Я удалил зависимости Android из пути сборки, и это сработало.

Cüneyt
источник
1

Эта ошибка произошла со мной, когда в проекте моего приложения я сослался на проект библиотеки в моем рабочем пространстве Eclipse (в моем случае на SDK Facebook) и в то же время включил SDK Facebook как банку в папку libs. Удаление ссылки на библиотеку, но сохранение баночки в папке libs устранило ошибку.

Гуннар Карлссон
источник
1

У меня была такая же проблема. Мне пришлось удалить .apkфайл, и тогда все заработало.

sefodu
источник
1

Для меня я удалил android-support-v4.jar из папки lib, а также удалил из пути сборки.

Рейч
источник
Привет, Рэйч, добро пожаловать в Stackoverflow. Ваш ответ был отмечен как некачественный из-за его длины и содержания. Отвечая на вопросы, просьба дополнительно описать, как решить проблему. Это поможет другим и заработает репутацию :)
superhero
1
  • Щелкните правой кнопкой мыши проект и перейдите в build Path>configuration build path
  • Выберите вкладку библиотеки и нажмите support-v4 library и нажмите удалить
  • Нажмите ОК

а затем очистите свой проект и запустите, он будет работать :-)

Иман Мараши
источник
0

На случай, если кто-то еще ударит головой по этому поводу, как только что сделал я:

В моем случае речь шла о цепочке библиотечных проектов. Просто очистив проект во всех библиотеках, все исправлено

Джо Плант
источник
0

Я нашел ниже решение в eclipse ... надеюсь, это сработает для вас :)

Right click on the Project Name

Select Java Build Path, go to the tab Order and Export

Unchecked your .jar library's
Харшал Бенаке
источник
0

Эта проблема возникает, когда одна и та же библиотека добавляется в ваш проект несколько раз. Если вы не добавляли библиотеку несколько раз намеренно, проверьте зависимости / частные библиотеки библиотек, которые вы добавили в свой проект, скорее всего, они уже включили библиотеку, которая вызывает этот конфликт.

Умер Фарук
источник
0

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

Prabakaran
источник
0

У меня была эта проблема в Intellij, и это произошло потому, что библиотека ActionBarSherlock, которую я добавил в свой проект, определила android-support-v4.jar как зависимость компиляции, и эта банка уже была включена в мой проект, поэтому было несколько копий / версия DEX в время компиляции.

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

TimT
источник
0

Для меня проблема заключалась в том, что я ранее добавил проект библиотеки (autobahn lib), а позже переключился на файл Jar той же библиотеки. Хотя я удалил ссылки на более старый проект библиотеки, я получал эту ошибку. После всех ответов здесь я проверил путь сборки и т. Д. Но я не добавил эти библиотеки для создания пути вручную. Так что мне нечего было удалять. Наконец-то наткнулся на эту папку.

бен / dexedLibs

Я заметил, что было два файла jar с тем же именем, что и autobahn Android, который вызывал конфликт. Поэтому я удалил все файлы jar в папке dexedLibs и перестроил проект. Это решило проблему.

Аджит Мемана
источник
0

Чтобы добавить множество других потенциальных источников ... Я обновил все библиотеки в libпапке моего проекта, но затем Eclipse «услужливо» переустановил все исходные библиотеки. Внутри Eclipse больше не было ссылок на эти библиотеки, но внешняя программа dex-maker просто захватила все файлы в libкаталоге и, таким образом, получила две версии нескольких библиотек..jar файлов .

git statusидентифицировал новые файлы и git clean -fизбавлялся от них для меня (хотя иногда мне приходилось ждать или перезапускать Eclipse в Windows, потому что файлы все еще были открыты из копии).

Брайан Уайт
источник
0

УЛЬТРА простое и лучшее решение:

Удалите все в папке основного проекта правой кнопкой мыши -> Свойства -> Путь сборки Java, кроме Android XY (где XY - это версия в android). Чистота и постройка. Готово!

Перед этим убедитесь, что у вас есть единственный файл android-support-v4.jar.

Андрес Фг
источник
0

Если вы используете Кордову, попробуйте Cordova чистую команду

Мербин Джо
источник