2011-10-07 14 views
29

Ok, ora sono davvero bloccato qui. Non so cosa fare, dove andare o QUALCHE COSA!Dex Loader Impossibile eseguire più file dex definire

Ho cercato di disinstallare, reinstallare, entrambe le versioni di SDK ed Eclipse, provando a Google, ma nu-uh ... Niente !!!

posso correre la mia applicazione in emulatore, ma non posso esportarla ...

[2011-10-07 16:35:30 - Dex Loader] Impossibile eseguire dex: file DEX più definiscono lcom/dreamhawk/kalori/DataBaseHelper;

questo è 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); 
    } 

} 

ho il sospetto:

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

Ma non so cosa fare ... Please help !!! : '(

+0

Hai provato a costruirlo direttamente con formica, piuttosto che passare attraverso eclissi ? In tal caso, puoi pubblicare il log di compilazione completo? Inoltre, stai includendo progetti di libreria o file jar nel progetto? – JesusFreke

+0

No, non ho. No, non ho altri progetti di libreria o .jars, uso solo Android 2.3.3 e ho un database memorizzato nella cartella delle risorse. Questo ha funzionato prima, ma da quando ha aggiornato ADT ed Eclipse, questo ha fallito. Non ho provato Ant, e non ho tempo per farlo ora:/ – DreamHawk

+0

@ user889771 stesso, ho aggiornato adt e il problema è iniziato a verificarsi – Rob

risposta

7

ho aggiornato eclissi (Help->Check per gli aggiornamenti) oggi (21 ottobre 2011) e ora non vedo l'errore. Prima che ho avuto l'errore "Unable to execute dex: Multiple dex files define". Spero che questo aiuti.

+0

Nop! Non aiuta Per me che lavoro su alcuni vecchi progetti in Eclipse, questo errore persiste ancora. –

1

Prova seguire i passaggi: Disattiva "Project-> Build Automatically" opzione, "pulito" e "Build" del progetto, quindi provare a eseguire opere per me possibile impostare di nuovo "Build automaticamente".. opzione su

+0

Questo non risolve il problema per me, il problema riappare quando provo a eseguire l'app – Rob

1

Vedevo anche il messaggio "Più file dex definisci". Dopo aver letto about some of the changes in R14, ho cancellato t lui la directory bin per il mio progetto, ha pulito e ricostruito il progetto come descritto da @abbandon sopra e riavviato Eclipse. Questi passaggi hanno risolto il problema per me.

8
  1. riavviare Eclipse,
  2. Elimina bin & cartella gen e
  3. Infine ripulire il progetto e costruire di nuovo.

questo ha lavorato per me .. :)

+0

Mi ha aiutato. Grazie!!! – offset

2

WOW finalmente ...

Questo errore era abbastanza raccapricciante. Quello che ho fatto alla fine è stato scaricare l'ultima versione di Eclipse Java EE, quindi ho installato il plugin ADT nel nuovo Eclipse. Vedere Installing the Eclipse Plugin.

In seguito, ho configurato il mio progetto come normale, e ho usato le linee guida esportatori trovate qui: Signing Your Applications

Ma comunque ho visto molte risposte ... e il problema reale è estremamente difficile da diagnosticare. La possibilità è che i problemi si trovano nell'incompatibilità tra il plugin ADT e l'IDE di Eclipse. So solo che usare le versioni più recenti farà funzionare le cose (dal 5 settembre 2012).

6

Problema risolto.

Prima dell'aggiornamento, avevo 3 progetti Android: App1, App2 e Lib. Lib è un progetto di libreria Android e App1 e App2 lo utilizzano.

Dopo l'aggiornamento sia ADT e SDK ho visto errori come

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

La soluzione era di rimuovere sia in App1 e App2 la cartella denominata "Lib_src".

+0

Questo l'ha risolto per me. Grazie! –

4

Sia la libreria che i progetti di app contengono lo stesso file DataBaseHelper.java. Basta escluderlo dal progetto App.

+0

Cosa fare se si desidera sovrascrivere quello della libreria? –

57

C'è un file in bin/dexedLibs Lo stesso file esiste in librerie

eliminarlo in librerie e dovrebbe funzionare.

Per me è stato l'android-support-v4.jar.

Spero che questo aiuti

+1

+1, stavo subendo lo stesso problema, mi hai salvato il mio tempo grazie a Dude @Ahmed Zaidi –

+0

Quando eseguo di nuovo il progetto, ricrea i vasi nella cartella. – erdomester

+1

questa dovrebbe essere la risposta accettata – Shine

0

è stato risolto cancellando biblioteche 3rd party dalla cartella librerie.

Inizialmente ho provato a compilare i jar di ActionBarSherlock e MenuDrawer usando la formica ma non ha funzionato.

L'eliminazione di questi vasi dalla directory libs Corretto il bug

0

Nel mio caso ci sono stati due diversi file di vasetti inclusi nella cartella libs.

Ho rimosso uno di questi risolve il mio problema.

20

fisso seguendo semplici passi

  • progetto fare clic destro
  • andare alle proprietà
  • click Java Build Path
  • su 'ordine ed esportazione' file jar scheda deselezionare e le dipendenze biblioteche
  • progetto ricostruito.
+0

hai ragione +1 –

3

Mi è capitato questo caso quando avevo due copie della stessa lib (avevo due diverse versioni della libreria di supporto Android versione 4). Una volta rimosso uno di questi, il progetto è stato compilato e sono riuscito a eseguirlo. Dan

+0

Questo ha funzionato per me .... Nel mio progetto c'erano anche due librerie che avevano classi simili quindi ho rimosso una delle librerie e le cose hanno funzionato perfettamente .... Grazie – karn

+0

È stato risolto per me quando Ho aggiornato la libreria di supporto per google-play-services-lib. –

1

per me, stavo usando Android Studio quando ho riscontrato questo problema, stavo usando Google Admob e SDK esterni di Analytics.

Ora li sono spedizione con l'SDK kitkat, che ha causato il conflitto, la soluzione era quella di aprire il file project.iml e rimuovere le seguenti righe:

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

Speranza che aiuta, fare attenzione ..

0

se si sta importando un barattolo di supporto da un altro progetto è necessario andare a * Java Build Path * su 'ordine ed esportazione' cliccare sul vaso supporto e metterlo in cima ai vostri dipendenze progetto ricostruito.

0

In Cordova, nella cartella libs c'è un file che abbiamo impostato nel percorso di costruzione. Ho aggiornato Cordova e aggiorno il file jar ma dimentico di cancellare il vecchio file jar nella cartella libs. rimosso il vecchio e il progetto ha funzionato come un incantesimo!

0

Nessuno dei suggerimenti qui ha risolto per me. Questo è stato come ho riparato:

All'interno del file /proj.android/jni/Application.mk sulla linea 3, è stato precisando di costruire in "MIPS". Ho cambiato questo in APP_ABI: = armeabi-v7a in modo che possa trovare tutte le librerie pre-compilate correttamente.

0

Rimossa la cartella Libs nel progetto, la nuova cartella Lib_src, importare nuovamente jar. e fai clic destro progetto -> Costruisci percorso -> Config Costruisci percorso, cartella Libs selezionata e fai clic su Rimuovi, fai clic su Aggiungi cartella -> seleziona Lib_src -> OK

Problemi correlati