Невозможно выполнить dex: несколько файлов dex определяют Lcom/facebook/android/AsyncFacebookRunner$1;

У меня есть приложение для Android, которое вызывает библиотеку jar, скажем, b.jar. Эта библиотека b.jar. затем вызывает facebook sdk lib. Когда я компилирую свое приложение в этой ситуации, оно всегда говорит

Невозможно выполнить dex: несколько файлов dex определяют Lcom/facebook/android/AsyncFacebookRunner$1; Ошибка преобразования в формат Dalvik: невозможно выполнить dex: несколько файлов dex определяют Lcom/facebook/android/AsyncFacebookRunner$1;

Я использовал несколько дней, чтобы заставить его работать, однако мне не удалось решить эту проблему. Кто-нибудь знает, как решить эту проблему?


person Jacky Lam    schedule 29.03.2013    source источник
comment
возможно, это связано с тем, что одна и та же банка включена в ваш проект более одного раза. Как включается facebook sdk lib, это банка? Если это так, убедитесь, что ваш проект включает его только один раз (чтобы он не отображался в проектах библиотек, на которые ссылаются, или в путях сборки и т. д.).   -  person ab11    schedule 29.03.2013
comment
Я включаю проект facebook lib из Свойства->Android->Библиотека->Добавить в мой проект b lib. Затем я включаю проект b lib в свое основное приложение из меню «Свойства» -> «Android» -> «Библиотека» -> «Добавить». Я встречаю эту проблему, когда настраиваю их в этой ситуации. У кого-нибудь есть идея решить это?   -  person Jacky Lam    schedule 30.03.2013
comment
@JackyLam Привет, у меня такая же проблема. Надеюсь, вы решили проблему? Поделитесь, как вы это сделали?   -  person Erma Isabel    schedule 18.07.2013


Ответы (3)


Перейдите в свойства проекта, а затем путь сборки Java -> Библиотеки -> Удалить зависимости Android и ОК, затем запустите свой проект.

По ссылке: https://stackoverflow.com/a/15247670/1585773

Работал отлично для меня.

person May    schedule 05.08.2013
comment
Если Facebook sdks упоминается как библиотека, то, если вы удалите зависимости Android из пути сборки java, проект не будет скомпилирован, поскольку facebook jar появится в зависимостях Android. - person Jasper; 24.06.2015

Все ответы - это обходной путь. Они не решают основную причину проблемы. Если вы посмотрите на структуру своего проекта, то увидите, что есть проект FacebookSDK и ваш проект. В обоих проектах у вас есть пакет com.facebook.android (первый java-файл AsyncFacebookRunner), в который включены одни и те же java-файлы. Очевидно, что несколько файлов dex будут определять ваши файлы классов, и вы получите сообщение об ошибке.

Решение. Удалите com.facebook.android из основного проекта (не FacebookSDK).

person Sandeep Taneja    schedule 30.04.2014
comment
+1 для всех ответов - обходной путь. Я рыщу в Интернете и не нахожу ничего, кроме обходных путей. Я бы убил за статью о том, как работает индексация нескольких проектов - person slezica; 10.06.2015

Для меня это было вызвано конфликтом с AddThis SDK, так как AddThis SDK включает частичную копию встроенного в него Facebook SDK. Итак, класс com/facebook/android/AsyncFacebookRunner был определен дважды.

Я смог решить это, используя эти ответы:

Android AddThis sdk + Facebook sdk не будет встроен в Android Студия

Android Studio — сбой приложения в AddThis.jar — Сообщение "Источники не найдены"

В частности, используя этот шаг из второго ответа:

Используется команда zip -d addthis0.0.8.jar com/facebook/* в Терминале для удаления файлов Facebook из addthis0.0.8.jar

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

person Saxon Druce    schedule 30.10.2014