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

Хорошо, теперь я действительно застрял здесь. Я не знаю, что делать, куда идти или НИЧЕГО!

Я пытался удалить, переустановить как SDK, так и Eclipse-версии, пытаясь найти это в Google, но ню-э... Ничего!!!

Я МОГУ запустить свое приложение в эмуляторе, но я не могу его ЭКСПОРТИРОВАТЬ...

[2011-10-07 16:35:30 - Dex Loader] Невозможно выполнить dex: несколько файлов dex определяют Lcom/dreamhawk/kalori/DataBaseHelper;

это dataBaseHelper

package com.dreamhawk.kalori;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;



public class DataBaseHelper extends SQLiteOpenHelper {

    // The Android's default system path of your application database.
    private static String DB_PATH = "/data/data/com.dreamhawk.kalori/databases/";

    private static String DB_NAME = "livsmedel_db";
    private DataBaseHelper myDBHelper;
    private SQLiteDatabase myDb;

    private final Context myContext;

    private static final String DATABASE_TABLE = "Livsmedel";
    public static String DB_FILEPATH = "/data/data/com.dreamhawk.kalori/databases/lifemedel_db";
    public static final String KEY_TITLE = "Namn";
    public static final String KEY_BODY = "Kcal";
    public static final String KEY_ROWID = "_id";
    private static final int DATABASE_VERSION = 2;

    /**
     * Constructor Takes and keeps a reference of the passed context in order to
     * access to the application assets and resources.
     * 
     * @param context
     */
    public DataBaseHelper(Context context) {

        super(context, DB_NAME, null, 1);
        this.myContext = context;

        // checking database and open it if exists
        if (checkDataBase()) {
            openDataBase();
        } else {
            try {
                this.getReadableDatabase();
                createDatabase();
                this.close();
                openDataBase();

            } catch (IOException e) {
                throw new Error("Error copying database");
            }
            Toast.makeText(context, "Livsmedelsdatabasen importerad",
                    Toast.LENGTH_LONG).show();
        }

    }

    private boolean checkDataBase() {
        SQLiteDatabase checkDB = null;
        boolean exist = false;
        try {
            String dbPath = DB_PATH + DB_NAME;
            checkDB = SQLiteDatabase.openDatabase(dbPath, null,
                    SQLiteDatabase.OPEN_READONLY);
        } catch (SQLiteException e) {
            Log.v("db log", "database does't exist");
        }

        if (checkDB != null) {
            exist = true;
            checkDB.close();
        }
        return exist;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // db.execSQL(DATABASE_CREATE);
    }

     @Override
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

           Log.w("Kalori", "Upgrading database from version " + oldVersion + " to "
               + newVersion + ", which will destroy all old data");
           db.execSQL("DROP TABLE IF EXISTS Livsmedel");
           onCreate(db);

       }

    public DataBaseHelper open() throws SQLException {
        myDBHelper = new DataBaseHelper(myContext);
        myDb = myDBHelper.getWritableDatabase();
        return this;
    }

    public void createDatabase() throws IOException {

        InputStream assetsDB = myContext.getAssets().open("livsmedel_db");
        // OutputStream dbOut = new FileOutputStream(DB_PATH);
        String outFileName = DB_PATH + DB_NAME;
        OutputStream dbOut = new FileOutputStream(outFileName);

        Log.d("DH", "index=" + assetsDB);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = assetsDB.read(buffer)) > 0) {
            dbOut.write(buffer, 0, length);
        }

        dbOut.flush();
        dbOut.close();
        assetsDB.close();
    }

    public Cursor fetchAllNotes() {

        return myDb.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_TITLE,
                KEY_BODY }, null, null, null, null, null);
    }

    public void openDataBase() throws SQLException {
        String dbPath = DB_PATH + DB_NAME;
        myDb = SQLiteDatabase.openDatabase(dbPath, null,
                SQLiteDatabase.OPEN_READWRITE);
    }

}

Я подозреваю:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

Но я не знаю, что делать... Пожалуйста, помогите!!! :'(


person DreamHawk    schedule 07.10.2011    source источник
comment
Вы пытались построить его напрямую с помощью муравья, а не через затмение? Если да, можете ли вы опубликовать полный журнал сборки? Кроме того, включаете ли вы какие-либо библиотечные проекты или файлы jar в проект?   -  person JesusFreke    schedule 07.10.2011
comment
Нет, нет. Нет, у меня нет других библиотечных проектов или .jars, я использую только Android 2.3.3, и у меня есть сохраненная база данных в папке с ресурсами. Это работало раньше, но после обновления ADT и Eclipse это не удалось. Я не пробовал Ant, и у меня сейчас нет времени этим заниматься :/   -  person DreamHawk    schedule 07.10.2011
comment
@ user889771 то же самое, я обновил объявление, и проблема начала возникать   -  person Rob    schedule 21.10.2011
comment
Посмотрите на мой ответ по следующей ссылке. stackoverflow.com/a/38391449/3702595   -  person Sattar Hummatli    schedule 15.07.2016


Ответы (17)


Я обновил eclipse (Help->Check для обновлений) сегодня (21 октября 2011 г.) и теперь не вижу ошибки. До этого у меня была ошибка "Unable to execute dex: Multiple dex files define". Надеюсь это поможет.

person Dhairya Vora    schedule 21.10.2011
comment
Нет! Это не помогает. Для меня, работающего над некоторыми старыми проектами в Eclipse, эта ошибка все еще сохраняется. - person Faizan Mubasher; 14.12.2015

В bin/dexedLibs есть файл Такой же файл есть в libs

Удалите его в libs, и он должен работать.

Для меня это был android-support-v4.jar.

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

person Ahmed Zaidi    schedule 09.12.2012
comment
+1, у меня была такая же проблема, ты сэкономил мне время, спасибо, чувак @Ahmed Zaidi - person DD.; 06.06.2013
comment
Когда я снова запускаю проект, он воссоздает банки в папке. - person erdomester; 21.03.2014
comment
Я не думал, что папка libs скомпилирована независимо от того, находится ли она в пути сборки или нет. Хороший ответ. - person Clocker; 08.07.2014

Исправлено это, выполнив простые шаги

  • щелкните правой кнопкой мыши проект
  • перейти к свойствам
  • щелкните Путь сборки Java
  • на вкладке «заказ и экспорт» снимите флажки с jar-файлов и библиотек зависимостей.
  • перестроенный проект.
person asok Buzz    schedule 02.10.2013

  1. Перезапустить затмение,
  2. Удалите папку bin & gen и
  3. Наконец, очистите проект и соберите его снова.

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

person Indhu    schedule 26.06.2012

Проблема решена.

До обновления у меня было 3 андроид-проекта: App1, App2 и Lib. Lib — это проект библиотеки Android, и App1 и App2 используют его.

После обновления как ADT, так и SDK я увидел такие ошибки, как

[2012-12-05 15:54:10 - Dex Loader] Unable to execute dex: Multiple dex files define Lxxx;
[2012-12-05 15:54:10 - TrailGuide] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lxxx;

Решение состояло в том, чтобы удалить как в App1, так и в App2 папку с именем «Lib_src».

person Jordi    schedule 05.12.2012

И проект библиотеки, и проект приложения содержат один и тот же файл DataBaseHelper.java. Просто исключите его из проекта приложения.

person DicomJ23    schedule 08.12.2012
comment
Что делать, если я хочу перезаписать файл из библиотеки? - person Mikaël Mayer; 24.10.2013

У меня это случилось, когда у меня было две копии одной и той же библиотеки (у меня было две разные версии библиотеки поддержки Android версии 4). Как только я удалил один из них — проект скомпилировался, и я смог его запустить. Дэн

person FunkSoulBrother    schedule 30.10.2013
comment
Это сработало для меня... В моем проекте также было две библиотеки с похожими классами, поэтому я удалил одну из библиотек, и все заработало отлично.... Спасибо - person karn; 06.03.2014
comment
Это было исправлено для меня, когда я обновил библиотеку поддержки для google-play-services-lib. - person alice_silver_man; 26.07.2014

ВАУ наконец...

Эта ошибка была довольно ужасной. В конце концов я загрузил последнюю версию Eclipse Java EE, а затем установил подключаемый модуль ADT в новый Eclipse. См. раздел Установка подключаемого модуля Eclipse.

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

Но в любом случае я видел много ответов... и реальную проблему чрезвычайно сложно диагностировать. Возможно, проблема заключается в несовместимости плагина ADT и Eclipse IDE. Я просто знаю, что использование самых последних версий заставит все работать (по состоянию на 5 сентября 2012 г.).

person Nicholas Miller    schedule 05.09.2012

Попробуйте выполнить следующие шаги: Отключите опцию «Проект-> Автоматическая сборка», затем «Очистить» и «Создать» проект, затем попробуйте запустить. работает на меня. можно установить для параметра «Автоматическая сборка» значение «Вкл.»

person abbandon    schedule 20.10.2011
comment
Это не решает проблему для меня, проблема просто появляется снова, когда я пытаюсь запустить приложение. - person Rob; 21.10.2011

Я также видел сообщение «Определение нескольких файлов dex». Прочитав о некоторых изменениях в R14, я удалил каталог bin для своего проекта, очистил и пересобрал проект, как описано выше @abbandon, и перезапустил Eclipse. Эти шаги устранили проблему для меня.

person terry    schedule 25.10.2011

для меня я использовал студию Android, когда столкнулся с этой проблемой, я использовал внешние SDK Google Admob и Analytics.

Теперь они поставляются с kitkat SDK, что вызвало конфликт, решение было открыть файл project.iml и удалить следующие строки:

<orderEntry type="module-library">
  <library>
    <CLASSES>
      <root url="jar://$USER_HOME$/Downloads/Ads/lib/amazon-ads-4.0.9.jar!/" />
    </CLASSES>
    <JAVADOC />
    <SOURCES />
  </library>
</orderEntry>
<orderEntry type="module-library">
  <library>
    <CLASSES>
      <root url="jar://$USER_HOME$/Downloads/Folx/application/GoogleAdMobAdsSdk-6.2.1/Add-ons/googleanalyticsandroid/libGoogleAnalyticsV2.jar!/" />
    </CLASSES>
    <JAVADOC />
    <SOURCES />
  </library>
</orderEntry>

Надеюсь поможет, берегите себя..

person SAFAD    schedule 20.03.2014

Исправил, удалив сторонние библиотеки из папки libs.

Сначала я пытался создать jar-файлы ActionBarSherlock и MenuDrawer с помощью ant, но это не сработало.

Удаление этих банок из каталога libs исправило ошибку.

person HimalayanCoder    schedule 28.08.2013

В моем случае в папке libs было два разных файла jar.

Я удалил один из них, это решило мою проблему.

person KHALID    schedule 26.09.2013

если вы импортируете банку поддержки из другого проекта, вам нужно перейти к * Java Build Path * в разделе «Заказать и экспортировать», щелкнуть банку поддержки и поместить ее поверх вашего перестроенного проекта зависимостей.

person Gal Rom    schedule 30.07.2014

В Cordova в папке libs есть файл, который мы указали в пути сборки. я обновил кордову и обновил файл jar, но забыл удалить старый файл jar в папке libs. удалил старый, и проект заработал как шарм!

person locknies    schedule 19.09.2014

Ни одно из предложений здесь не решило это для меня. Вот как я это исправил:

Внутри файла /proj.android/jni/Application.mk в 3-й строке указывалось, что необходимо встроить «mips». Я изменил это на APP_ABI:=armeabi-v7a, чтобы он мог правильно найти все готовые библиотеки.

person redux    schedule 05.02.2015

Удалена папка Libs в проекте, новая папка Lib_src, снова импортируйте банку. и щелкните правой кнопкой мыши проект -> Путь сборки -> Путь сборки конфигурации, выберите папку Libs и нажмите «Удалить», нажмите кнопку «Добавить папку» -> выберите Lib_src -> «ОК».

person zxbin    schedule 12.03.2015