web-dev-qa-db-ja.com

Dex Loaderが複数のdexファイルを実行できない

さて、今私は本当にここで立ち往生しています。私は何をすべきか、どこへ行くべきか、何でもわからない!

SDKとEclipseバージョンの両方をアンインストール、再インストールしようとしましたが、これをGoogleにしようとしていますが、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;

しかし、私は何をすべきかわかりません...助けてください!!! : '(

29
DreamHawk

Eclipse(Help->Check更新))今日(2011年10月21日)そして今、私はエラーを見ません。その前にエラー「Unable to execute dex: Multiple dex files define"。 お役に立てれば。

7
Dhairya Vora

Bin/dexedLibsにファイルがありますlibsにも同じファイルが存在します

Libsで削除すると動作するはずです。

私にとっては、Android-support-v4.jarでした。

お役に立てれば

57
Ahmed Zaidi

簡単な手順に従って修正しました

  • プロジェクトを右クリック
  • プロパティに移動します
  • クリックJava Build Path
  • 「順序とエクスポート」タブで、jarファイルと依存ライブラリのチェックを外します
  • プロジェクトを再構築しました。
20
asok Buzz
  1. Eclipseを再起動し、
  2. Bin&genフォルダーを削除し、
  3. 最後にプロジェクトをクリーンアップして、再度ビルドします。

これは私のために働いた.. :)

8
Indhu

問題が解決しました。

アップグレードする前に、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」というフォルダーを削除することでした。

6
Jordi

ライブラリプロジェクトとアプリプロジェクトの両方に同じDataBaseHelper.Javaファイルが含まれています。 Appプロジェクトから除外するだけです。

4
DicomJ23

同じlibの2つのコピーがあったときに、これが起こりました(Androidサポートライブラリバージョン4)の2つの異なるリビジョンがありました。実行できました。ダン

3
FunkSoulBrother

やっと...

このエラーは非常に恐ろしいものでした。最終的に、Eclipseの最新バージョンをダウンロードしましたJava EE、ADTプラグインを新しいEclipseにインストールしました。 Installing the Eclipse Plugin を参照してください。

その後、通常のようにプロジェクトを構成し、ここにあるエクスポートガイドラインを使用しました: Signing Your Applications

とにかく、私は多くの答えを見てきました...そして、実際の問題は診断するのが非常に難しいです。可能性は、ADTプラグインとEclipse IDEの間の非互換性に問題があることにあります。最新バージョンを使用すると動作することを知っています(2012年9月5日現在)。

2
Nick Miller

次の手順を試してください。「プロジェクト」->「自動的にビルド」オプションを無効にしてから、「クリーン」および「ビルド」プロジェクトを実行してから実行してください。私のために働く。 「自動的にビルド」オプションをオンに戻すことができます

1
abbandon

また、「複数のdexファイルが定義しています」というメッセージが表示されていました。 R14の一部の変更について を読んだ後、プロジェクトのbinディレクトリを削除し、上記の@abbandonの説明に従ってプロジェクトをクリーンアップおよび再構築し、Eclipseを再起動しました。これらの手順で問題は解決しました。

1
terry

私にとっては、この問題に遭遇したときにAndroid studioを使用していました。GoogleAdmobと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>

お役に立てば幸いです。

1
SAFAD

別のプロジェクトからサポートjarをインポートする場合は、「注文とエクスポート」で* Javaビルドパス*に移動し、サポートjarをクリックして、依存関係を再構築したプロジェクトの上に配置する必要があります。

0
Gal Rom

私の場合、libsフォルダーには2つの異なるjarファイルが含まれていました。

問題を解決するためにそれらの1つを削除しました。

0
KHALID

Libsフォルダからサードパーティのライブラリを削除することで修正しました。

最初に、Antを使用してActionBarSherlockとMenuDrawerのjarを作成しようとしましたが、機能しませんでした。

Libsディレクトリからこれらのjarを削除すると、バグが修正されました

0
HimalayanCoder

プロジェクトのLibsフォルダー、新しいLib_srcフォルダーを削除し、jarを再度インポートしました。そして、プロジェクトを右クリック->ビルドパス->構成ビルドパス、選択されたLibsフォルダー、削除をクリックし、ボタンをクリックフォルダーの追加-> Lib_srcを選択-> OK

0
zxbin

Cordovaのlibsフォルダーには、ビルドパスで設定したファイルがあります。 Cordovaを更新し、jarファイルを更新しましたが、libsフォルダーの古いjarファイルを削除するのを忘れています。古いものを削除し、プロジェクトは魅力的に機能しました!

0
locknies

ここでの提案はどれも私にとってそれを解決しませんでした。これは私がそれを修正した方法でした:

3行目の/proj.Android/jni/Application.mkファイル内では、「mips」でビルドするように指定されていました。これをAPP_ABI:= armeabi-v7aに変更して、すべての事前構築済みライブラリを正しく検索できるようにしました。

0
redux