Неможливо виконати 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
Саттар Hummatli

Відповіді:


136

Це питання шляху побудови.

  • Переконайтесь, що ваша папка бін не включена у ваш шлях створення.

  • Клацніть правою кнопкою миші на своєму проекті -> перейдіть до властивостей -> Складіть шлях.

  • Переконайтесь, що бібліотека стільникових соток знаходиться у вашій libs/папці, а не у папці-джерелі.

  • Включіть бібліотеки libs/окремо в шлях збирання.

    До речі, ви можете android-support-v4захопити в бібліотеку, щоб отримати підтримку сендвіч-морозива замість бібліотеки підтримки соти.


50
Ця проблема також сталася, якщо у ваш шлях складання фізично включено кілька версій бібліотек. Вилучивши невикористані бібліотеки з libsшляху, очистіть і збережіть проект, перезавантажте Eclipse і перекомпілюйте його ще раз, працюючи для мене.
Арьо

Виключення папки bin із шляху збирання вирішило це для мене. Дякую!
алекоп

2
Основна причина проблеми полягала в тому, що одна з бібліотек використовувала бібліотеку дев'ятидольдароїдів як баночку, що зберігається в реєстрі ./libs, а інший проект використовує дев'ятиліндроїд, посилаючись на нього
Deepika Lalra

Це також може статися, коли у вас є щось на кшталт Foo.javaупаковки та Foo.javaв баночціlibs/
трилогія

Ця помилка / помилка трапляється, коли колись ваша папка проекту знаходиться на Google Диску. Я думаю, що помилки коли-небудь Диск синхронізується. Принаймні для мене
ymerdrengene

58

Я сьогодні зіткнувся з подібною помилкою, і причиною було те, що на бібліотеку підтримки посилалися два бібліотечні проекти, які використовували мій проект програми, але з різними версіями.

Більш детально: Мій додаток залежить від 2-х бібліотечних проектів

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

Для вирішення проблеми мені довелося зробити так, щоб бібліотека FaceBookSDK залежала від бібліотеки ABS, а не безпосередньо від бібліотеки підтримки.


Так, моє питання було схожим. Дві бібліотеки мали бібліотеку httpmime, тож я видалив одну і вказав на інший проект.
Метт

10
чи може хтось із вас, хлопці, пояснити, як саме ви це зробили?
Саміх А

3
@samih у прикладі, про який я згадував, спершу я видалив банку Android для підтримки-v4 з папки lib проекту FaceBookSDK і побудувати шлях. Потім я додав посилання на проект бібліотеки ActionBarSherlock.
М.Самер

для мене виявляється, інший розробник додав нову версію файлу jar-файлу, не видаляючи стару. Так було дві банки з однаковими класами. Таким чином, помилка "Кілька файлів dex ..." Ви можете зробити grep -r "OffendingClassName" | grep jar $ для пошуку файлів jar, що містять назву класу.
bibstha

Аналогічно, але я випадково додав android-support-v4.jarдо мого шляху створення Eclipse і додав його вручну до libsствореної мною папки. Через дублюючі посилання я не зміг скласти (і отримав повідомлення про помилку, яке отримав ОП). Я видалив libsпапку, яку я тупо створив, і все спрацювало. Дякую за підказку.
kurtzbot

47

Ну для мене я видалив файл у папці libs під назвою android support v4.jar, і все це вийшло. Удачі :)


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, він автоматично вмикає цей прапорець, тому мені доведеться повторювати цей процес ще раз.

Сподіваюся, це допомагає якійсь загубленій душі там :)


32

Перейдіть до Project / Properties та Java Built Path та зніміть прапорці з приватних бібліотек Android


1
Виправлена ​​моя проблема!
Тотич

Але його зупинка gcm.jar працювати, як змусити її працювати без цієї помилки?
Нарендра Сінгх

У мене виникла помилка: кілька dex Lcom / google / android / gms / analytics / Internal / Command $ 1. Я отримав це після оновлення google play до 22.1.1. Скасування вибору приватних бібліотек у програмі google play видалено помилку
eugene

Ти врятував мені життя! Thx ~
Лев Хсіе

15

Для мене просто перейдіть до Властивості проекту >> Шлях збірки Java >> Замовлення та експорт. Зніміть прапорці з усієї зовнішньої бібліотеки, як зображено нижче. Це працює для мене. Сподіваюся, що це допоможе.

Властивості проекту


це було проблемою для мене
Піюш-Питай будь-яку різницю

8

Я також зіткнувся з цією проблемою у своєму проекті. AVD не в змозі перезапустити контекст папок активів, lib, res та ін. проблема: Dex Loader] Неможливо виконати dex: Визначається кілька файлів dex Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl.

Потім я створив нові проекти і скопійований MainActivity.java, activity_main.xml, малює контекст. Потім видаліть старий проект із дослідження пакунків, перезавантажте Eclipse та AVD. Зараз мій проект працює належним чином .... :) Я сподіваюся, що ці кроки допоможуть вам у маленьких людей .. !!


8

У мене є те саме питання, що я спробував:

  1. Елемент списку
  2. Відкрити шлях побудови проекту,
  3. Виберіть вкладку "Бібліотеки",
  4. Видаліть всю бібліотеку, крім бібліотеки Android
  5. Додавання всіх необхідних файлів JAR,
  6. І Готово!

Це працює для мене, дякую.


так, я просто зробив те саме. видалено всі файли jar, додано назад. для того, щоб експортувати, перевіряти залежності та перевіряти всі додані бібліотеки
Maulik Sheth

6

Якщо хтось із вас зіткнувся з цією проблемою, використовуйте facebook-connent-плагін для phonegap

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


Це правильна відповідь. Пояснення ---- facebook.android включається двічі. Один раз у facebookSDK.jar, який включений у ваш проект, і як тільки файли java будуть безпосередньо включені у ваш проект. видалення його з вашого проекту - це чистий спосіб зробити це. всі інші відповіді - це просто робочі кола, які не експортуватимуть визначення чи щось таке ....
Sandeep Taneja

6

Як згадували інші, це відбувається, коли у вас є кілька копій одного класу на шляху збирання або в іншому місці вашого налаштування.

Я додав android-support-v4.jar до моїх файлів / папки, і якимось затемненням додав другу копію до бін / класів / android-support-v4.jar.

Ви можете перевірити на це за допомогою

grep -r YourOffendingClassName YourApp | греп баночка

Видалення додаткової копії у біні / класах вирішило проблему - не знайте, чому Eclipse зробив копію саме там.


1
Я спробував усі інші перераховані тут варіанти, але це був той, який вирішив це для мене! :) І так, Eclipse повинен померти, а Android Studio має отримати свою версію 1.0 - світ тоді стане кращим місцем.
Йохан Пол

5

Я отримав цю помилку з іншої причини. Я помилявся, додавши бібліотеку підтримки v4 AND v13. Це мені було не потрібно, оскільки мій minSdkVersion 15.

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


Це було і мене. Бібліотека підтримки v13 включає бібліотеку підтримки v4, тому dex демонстрував декларації кількох класів.
Кайл Фальконер

4

Навіть переглянувши кілька відповідей, жодне рішення не працювало для мене.

Я видалив "Залежності Android" зі шляху збірки. Знову додано всі файли jar до шляху збирання, і помилка зникла. Якесь затемнення здавалося, що кеширує речі.


3

Я залишаю цю відповідь тому, хто потрапляє в цей сценарій, як я.

Я спіткнувся тут і там, перш ніж помітив, що помилково перетягнув файл JAR бібліотеки підтримки в папку src і він лежав там. Оскільки я не мав уявлення, як це сталося або коли я кинув його туди, я ніколи не міг уявити, що там щось не так.

Я отримував таку ж помилку, я виявив проблему через якийсь час і усунув її. Зараз проект прекрасно працює.


3

Рішення для мене було просто робити наступні речі:

  1. -> каталог lib у вашому проекті та видаліть будь-які кілька елементів.
  2. Project-> Properties-> Java build Path та delete будь-яку бібліотеку Dependpendence додано автоматично, а не ви! -> Застосувати
  3. Перезавантажте IDE Eclipse
  4. Тепер очистіть проект.
  5. Запуск / налагодження на пристрої / емуляторі проекту ... Удачі

проблема все ще зберігається
Ахіл Джайн

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 (Запустити програму і крос пальцями і ...)

ЦЕ ПРАЦЮЄ!

Сподіваюся, що це комусь допоможе ... Дякую людям!


2

У мене виникло це питання, і це не означає, що одна і та ж бібліотека завантажується багато разів, але система намагається одночасно завантажити клас з тим самим іменем і, можливо, тим же ім'ям пакета, тобто

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

та інший

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

Як слід підходити? Ви повинні проаналізувати, які методи використовуються, метод library1.jar або library2.

Є 2 рішення,

  1. Перейменуйте ім'я пакета, а потім dalvik інтерпретує, що вони є різними класами
  2. Або якщо ви хочете ризикувати, очистіть клас, який не містить методу, який ми дійсно використовуємо.

Я сподіваюся, що прояснив це часто задаване питання.


2

Я вилучив залежності Android від шляху збірки, і він працював.


1

Ця помилка трапилася зі мною, коли в проекті свого додатка я посилався на проект «Бібліотека» в робочій області Eclipse (в моєму випадку - SDK Facebook) і в той же час включав SDK Facebook як банку в папку libs. Видалення посилання на бібліотеку, але зберігання баночки в папці libs усунуло помилку.


1

У мене була така ж проблема. Мені довелося видалити .apkфайл, і тоді він працював.


1

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


Привіт Рач, ласкаво просимо до Stackoverflow. Ваша відповідь позначена як неякісна через її довжину та зміст. Відповідаючи на запитання, будь ласка, надайте додатковий опис, як вирішити проблему. Це допоможе іншим і заробить вам репутацію :)
супергерой

1
  • Клацніть правою кнопкою миші на проект і перейдіть до build Path>configuration build path
  • Виберіть вкладку "Бібліотека" і натисніть support-v4 libraryкнопку "Видалити"
  • Натисніть кнопку ОК

а потім очистіть проект і запустіть його: --)


0

У випадку, якщо хтось бив головою про це питання, як я щойно:

Моя справа стосувалася ланцюжка бібліотечних проектів. Просто зробити проект чистим у всіх бібліотеках все виправлено


0

Нижче я знайшов рішення в затемненні ... сподіваюся, воно працює для вас :)

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 з вихідної папки він працював чудово.


0

У мене була така проблема в Intellij, і це було через те, що бібліотека ActionBarSherlock, яку я додав до свого проекту, визначала андроїд-підтримку-v4.jar як залежність від компіляції, і цей jar вже був включений у мій проект, тому було кілька копій / версії DEX на час складання.

Рішення полягало в тому, щоб змінити залежність модуля ActionBarSherlock, щоб цей jar був Runtime, а не компільований, оскільки мій проект вже його забезпечував.


0

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

бін / dexedLibs

Я помітив, що було два файли jar з однаковою назвою, що відповідають autobahn Android, що спричинило конфлікт. Тож я видалив усі файли jar із папки dexedLibs та відновив проект. Це вирішило це питання.


0

Щоб додати безліч інших потенційних джерел ... Я оновив усі бібліотеки в libпапці свого проекту, але потім Eclipse "корисно" перевстановив усі оригінальні бібліотеки. Всередині Eclipse вже не було посилань на ці бібліотеки, але зовнішня програма декс-мейкера просто схопила всі файли в libкаталозі і отримала дві версії декількох бібліотечних .jarфайлів.

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


0

ULTRA просте рішення та найкраще:

Видаліть все в папку Основного проекту правою кнопкою миші -> Властивості -> Шлях збірки Java, крім Android XY (де XY - версія для Android). Очистити та будувати. Готово!

Переконайтеся, що перед цим мати єдиний android-support-v4.jar.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.