首页 文章

Dex Loader无法执行多个dex文件定义

提问于
浏览
29

好的,现在我真的被困在这里了 . 我不知道该做什么,去哪里或任何事情!

我一直试图卸载,重新安装SDK和Eclipse版本,试图谷歌这个,但nu-uh ......没什么!

我可以在模拟器中运行我的应用程序,但我无法导出它...

[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 回答

  • 1

    如果你要从另一个项目导入一个支持jar,你需要在'order and export'上点击* Java Build Path *点击支持jar并将它放在你的依赖项重建项目之上 .

  • 0

    在Cordova中,在libs文件夹中有一个我们在构建路径中设置的文件 . 我已更新cordova并更新jar文件但忘记删除libs文件夹中的旧jar文件 . 删除旧的和项目工作就像一个魅力!

  • 8

    这里没有任何建议为我解决了 . 这是我修复它的方式:

    在第3行的文件/proj.android/jni/Application.mk中,它指定构建“mips” . 我将其更改为APP_ABI:= armeabi-v7a,以便它可以正确找到所有预建库 .

  • 2

    删除了项目中的Libs文件夹,新的Lib_src文件夹,再次导入jar . 然后右键单击项目 - >构建路径 - >配置构建路径,选择Libs文件夹并单击删除,单击按钮添加文件夹 - >选择Lib_src - >确定

  • 1

    我今天(2011年10月21日)更新了eclipse( Help->Check 更新),现在我没有看到错误 . 在它之前我有错误“ Unable to execute dex: Multiple dex files define ” . 希望这可以帮助 .

  • 1

    bin / dexedLibs中有一个文件libs中存在相同的文件

    在libs中删除它,它应该工作 .

    对我来说这是android-support-v4.jar .

    希望这可以帮助

  • 0

    通过以下简单步骤修复它

    • 右击项目

    • 转到属性

    • 单击Java Build Path

    • on 'order and export' tab取消选中jar文件和依赖库

    • 重建项目 .

  • 0
    • 重启eclipse,

    • 删除bin&gen文件夹和

    • 最后清理项目并重新构建 .

    这对我有用.. :)

  • 6

    问题解决了 .

    在升级之前,我有3个android项目: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

    Library和App项目都包含相同的DataBaseHelper.java文件 . 只是从App项目中排除它 .

  • 57

    当我有两个相同的lib副本时(我有两个不同版本的Android支持库版本4),我发生了这种情况 . 一旦我删除其中一个 - 项目编译,我就能运行它 . 担

  • 0

    哇终于......

    这个错误非常可怕 . 我最终做的是下载最新版本的Eclipse Java EE,然后我将ADT插件安装到新的Eclipse中 . 见Installing the Eclipse Plugin .

    之后,我将项目配置为正常,并使用此处的导出指南:Signing Your Applications

    但无论如何我已经看到很多答案......实际问题很难诊断 . 可能性是问题在于ADT插件和Eclipse IDE之间不兼容 . 我只知道使用最新版本可以使事情有效(截至2012年9月5日) .

  • 7

    尝试以下步骤:禁用“Project-> Build Automatically”选项,然后选择“Clean”和“Build”项目,然后尝试运行 . 适合我 . 可以将“自动构建”选项设置为“开”

  • 20

    我也看到了"Multiple dex files define"消息 . 在阅读了about some of the changes in R14之后,我删除了项目的bin目录,清理并重建了上面@abbandon所描述的项目并重新启动了Eclipse . 这些步骤为我解决了这个问题 .

  • 0

    对我来说,当我遇到这个问题时,我正在使用Android工作室,我正在使用Google Admob和Analytics外部SDK .

    现在他们用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>
    

    希望它有所帮助,保重......

  • 0

    通过从libs文件夹中删除第三方库来修复它 .

    最初我尝试使用ant构建了ActionBarSherlock和MenuDrawer的jar,但它没有用 .

    从libs目录中删除这些jar修复了这个bug

  • 3

    在我的情况下,libs文件夹中包含两个不同的jar文件 .

    我删除了其中一个解决了我的问题 .

相关问题