29

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

我一直在尝试卸载、重新安装 SDK 和 Eclipse 版本,试图用谷歌搜索出来,但是 nu-uh... 什么都没有!!!

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

[2011-10-07 16:35:30 - Dex Loader] 无法执行 dex:多个 dex 文件定义 Lcom/dreamhawk/kalori/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;

但我不知道该怎么办......请帮助!:'(

4

17 回答 17

57

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

在库中删除它,它应该可以工作。

对我来说,它是 android-support-v4.jar。

希望这可以帮助

于 2012-12-09T00:22:39.243 回答
20

通过以下简单步骤修复它

  • 右键项目
  • 去属性
  • 单击 Java 构建路径
  • 在“订购和导出”选项卡上取消选中 jar 文件和依赖库
  • 重建项目。
于 2013-10-02T07:10:45.277 回答
8
  1. 重启日食,
  2. 删除 bin & gen 文件夹和
  3. 最后清理项目并重新构建它。

这对我有用.. :)

于 2012-06-26T16:27:30.637 回答
7

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

于 2011-10-21T09:14:15.103 回答
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”的文件夹。

于 2012-12-05T15:04:46.717 回答
4

Library 和 App 项目都包含相同的 DataBaseHelper.java 文件。只需将其从 App 项目中排除。

于 2012-12-08T22:35:29.163 回答
4

当我有同一个库的两个副本时,我遇到了这种情况(我有两个不同的 Android 支持库版本 4 修订版)。一旦我删除了其中一个 - 项目编译并且我能够运行它。担

于 2013-10-30T21:34:45.243 回答
2

哇终于...

这个错误非常可怕。我最终所做的是下载最新版本的 Eclipse Java EE,然后将 ADT 插件安装到新的 Eclipse 中。请参阅安装 Eclipse 插件

之后,我像往常一样配置了我的项目,并使用了此处的导出指南: 签署您的应用程序

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

于 2012-09-05T22:17:40.767 回答
1

尝试以下步骤:禁用“Project->Build Automatically”选项,然后“Clean”和“Build”项目,然后尝试运行。为我工作。可以将“自动构建”选项重新设置为开启

于 2011-10-20T03:05:03.783 回答
1

我还看到了“多个 dex 文件定义”消息。在阅读了 R14 中的一些更改后,我删除了项目的 bin 目录,按照上面@abbandon 的描述清理并重​​建了项目,然后重新启动了 Eclipse。这些步骤为我解决了问题。

于 2011-10-25T05:20:01.940 回答
1

对我来说,当我遇到这个问题时,我使用的是 Android Studio,我使用的是 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>

希望有帮助,保重。。

于 2014-03-20T16:46:40.793 回答
0

通过从 libs 文件夹中删除 3rd 方库来修复它。

最初我尝试使用 ant 构建 ActionBarSherlock 和 MenuDrawer 的罐子,但它没有用。

从 libs 目录中删除这些 jar 修复了该错误

于 2013-08-28T06:41:41.707 回答
0

就我而言,libs 文件夹中包含两个不同的 jar 文件。

我已经删除了其中一个,它解决了我的问题。

于 2013-09-26T12:18:18.820 回答
0

如果您要从另一个项目导入支持 jar,则需要转到“订购和导出”上的 *Java 构建路径 *,单击支持 jar 并将其放在依赖项重建项目的顶部。

于 2014-07-30T08:36:42.350 回答
0

在 Cordova 中,在 libs 文件夹中有一个我们在构建路径中设置的文件。我已经更新了科尔多瓦并更新了 jar 文件,但忘记删除 libs 文件夹中的旧 jar 文件。删除了旧的,项目就像一个魅力!

于 2014-09-19T05:09:03.580 回答
0

这里的任何建议都没有为我解决。这就是我修复它的方法:

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

于 2015-02-05T13:21:53.867 回答
0

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

于 2015-03-12T09:49:49.937 回答