Dex Loader Невозможно выполнить определение нескольких файлов dex - PullRequest
29 голосов
/ 07 октября 2011

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

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

Я МОГУ запустить свое приложение в эмуляторе, но не могу экспортировать его ...

[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;

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

Ответы [ 17 ]

57 голосов
/ 09 декабря 2012

В bin / dexedLibs есть файл Этот же файл существует в libs

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

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

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

20 голосов
/ 02 октября 2013

Исправлено, выполнив следующие простые шаги

  • щелкните правой кнопкой мыши проект
  • перейти к свойствам
  • нажмите Java Build Path
  • на вкладке «заказ и экспорт» снимите галку с файлов jar и зависимостей библиотеки
  • перестроенный проект.
8 голосов
/ 26 июня 2012
  1. Перезапустите eclipse,
  2. Удалите папку bin & gen и
  3. Наконец очистите проект и соберите его снова.

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

7 голосов
/ 21 октября 2011

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

6 голосов
/ 05 декабря 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».

4 голосов
/ 09 декабря 2012

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

3 голосов
/ 31 октября 2013

Это случилось со мной, когда у меня было две копии одной и той же библиотеки (у меня было две разные ревизии библиотеки поддержки Android версии 4).Однажды я удалил один из них - проект скомпилирован, и я смог его запустить.Dan

2 голосов
/ 06 сентября 2012

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

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

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

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

1 голос
/ 20 марта 2014

для меня, когда я решал эту проблему, я использовал Android studio, я использовал внешние 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>

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

1 голос
/ 25 октября 2011

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

...