NoClassDefFoundError-EclipseおよびAndroid


193

ビルドパスに2番目の外部ライブラリを追加するまで、正常に機能していたAndroidアプリを実行しようとして問題が発生しました。scoreninja jarを追加したので、アプリを実行しようとするとNoClassDefFoundErrorが発生します。

ここにメッセージがあります:

02-11 21:45:26.154: ERROR/AndroidRuntime(3654): java.lang.NoClassDefFoundError: com.scoreninja.adapter.ScoreNinjaAdapter

すべてのビルドスクリプトはAndroidツール(?)によって生成されるため、Eclipseのクリーンアップと再ビルドまたは再起動以外に何ができるかわかりません(すでに3つすべて試しました)。これを修正する方法を誰かが知っていますか?


1
どのようにjarファイルを追加しましたか?ビルドパス->ライブラリ->外部jarを使用してuを追加しましたか?
Teja Kantamneni 2010

1
プロジェクトを右クリック> [ ビルドパス
Tom R

4
最近ADTを更新した場合は、以下のJohnの回答を参照してください(そして
Atul Goyal

1
この問題が発生している場合、Johnの答えにすぐにジャンプする前に、以下の@Tillの答えは多くの人のためにも解決しています。
カルロスP

multidexを試しましたか?
Ashish Rawat、2015年

回答:


234

ADTを更新した後、この問題が発生しました。

私はすべてのJARファイルを「lib」というフォルダーに格納し、jarを通常のEclipseの方法でビルドパスに追加していました。これは私のアップデートまでうまくいきました。

更新後、jarに含まれていることがはっきりとわかるクラスのNoClassDefFoundErrorを取得していました(ReferencedLibrariesクラスを確認してください)。

解決策は、jarファイルをビルドパスから削除し、「lib」フォルダーの名前を「libs」に変更することでした。これはアリの慣習であり、新しいADTがライブラリを見つけて.apkファイルに含める方法のようです。これを実行すると、すべてが正常に機能しました。


1
どうもありがとう!昨日のADTアップデートの前に、libもlibsフォルダーも持っていなかったので、すべてがうまくいきました。アップデート後、すべての外部jarにこの問題がありました。それらはあなたの答えのおかげで修正されました。私はそれを機能させるためにあなたのものをブライアンのものと組み合わせる必要があります。
香港、

ジョンありがとう!フォルダーをlibsに変更した後、Eclipseを再起動して機能させる必要があったことを追加します。
Michaeldcooney

5
ADTを更新した後、同じ問題に遭遇しましたが、jarをプロジェクト外のディレクトリに保存し、ビルドパスにユーザーライブラリとして含めていました。解決策は、ビルドパスからユーザーライブラリを削除し、代わりに「外部jarの追加」を使用してjarを含め、「順序とエクスポート」タブのチェックボックスをオンにしてエクスポートすることでした。
Travis

1
C:\ android-sdk-windows \ extras \ android \ compatibility \ v13でandroid-support-v13.jarを外部ライブラリとして参照していました。そのJARをプロジェクトのlibsフォルダーに移動し、Javaビルドパス->ライブラリから参照を削除しました。クリーンビルドと私は再び行きました。
Snowwire、2012

こんにちは。/ libs内に外部jar libsを追加することで私たちのアプローチを試しましたが、次のエラーを受け取りました:Dalvik形式への変換はエラー1で失敗しました
Jonathan

100

jarライブラリをアセットまたはライブラリに配置する必要はありませんでしたが、このjarのボックスをチェックするだけで、[プロパティ]-> [Javaビルドパス]-> [注文とエクスポート](以前にリストされていましたが、選択されていません) )


本当にありがとう!私は長い間このエラーに苦労しており、「注文とエクスポート」画面でjarのdarnボックスをチェックするだけで済みました。面白いことに、Nook Tabletエミュレーターで機能するように、これを実行するだけで済みました。デバイスまたは他のエミュレーターに問題はありませんでした。
Luis

5
なぜ両方を実行し、ライブラリを追加し、注文とエクスポートのチェックボックスを選択する必要があるのか​​誰か知っていますか?外部JARを追加したいが、注文とエクスポートに含めない理由はありますか?
ルーモーダ、2012

ADTを更新した後にこの問題が発生し、これで解決しました。
cdavidyoung

5
それは私を助けました、しかし私がプロジェクトを行った後にのみ->クリーン
altumano

ありがとう!! 助かりました。Eclipse Junoをインストールした後、クリーンアップして再起動する必要がありました。
Rynardt 2013年

68

ビルドパスに外部jarを追加すると、jarがパッケージに追加されるだけですが、実行時には使用できません。

jarを実行時に使用できるようにするには、以下を行う必要があります。

  • jarをassetsフォルダーの下に置きます
  • jarのこのコピーをビルドパスに含めます
  • 同じポップアップウィンドウのエクスポートタブに移動します
  • 新しく追加されたjarに対してボックスをチェックします

ScoreNinjaAdapterは他の誰かのコードですが、一般的な使用法のようにそのようなエラーが含まれていたとしたら、私は非常に驚きます。エラーは自分のコードのある時点で発生します。
トムR

エラーは文字通りここで発生します:sna = new ScoreNinjaAdapter(this、SN_APP_ID、SN_APP_KEY);
トムR

import外部JARファイルのステートメントが必要ですか?私はそれらを使用したことがありません。
Anthony Forloney、2010

assestsフォルダアプローチから.jarファイルを削除してみましたか?
Anthony Forloney、2010

うん。最後に、私はこれらすべてにうんざりして、ソースをダウンロードして、プロジェクトにソースファイルをコピーしました。最高のソリューションではありませんが、現在は機能しています。あなたのすべての協力に感謝します。
トムR

48

私はこれをMapActivityのために持っていました。Eclipseでビルドすると、デバッガーでNoClassDefFoundが取得されます。

<Application>...</Application>要素内のマニフェストにライブラリを追加するのを忘れました

<uses-library android:name="com.google.android.maps" />

27

含まれるプロジェクトの順序を変更しました(Eclipse /ビルドパスの構成/順序とエクスポート)。2つの依存プロジェクトを「注文とエクスポート」リストの一番上に移動しました。「NoClassDefFoundError」の問題を解決しました。

私には奇妙です。含まれているライブラリとプロジェクトの順序の重要性については知りませんでした。Android + Eclipseは楽しいです:)


これは、バグレポートの2番目のユーザーコメントで言及されている解決策でもあります:code.google.com/p/android/issues/detail
id=

15

これが関連しているかどうか、またはまだ回答を探しているかどうかはわかりませんが、同じエラーを調査しようとしているときにこのスレッドに遭遇しました(ただし、理由はさまざまです)。

オンラインで解決策を見つけることはできませんでしたが、同様のスレッドでの回答により、プロジェクトを再構築(またはクリーンアップ)する必要があるだけだと思いました。

Eclipseで、Project => Cleanに移動します。プロジェクトを選択すると、Eclipseがそれ自体を修正したようです。私はこれで問題を解決しました。

お役に立てれば。


ええ、Eclipse / ADT / dex /何にでも基本的にビルドでクラスを見落とすバグがあるようです。またApplication、別のエラーにつながるクラスを見逃す可能性もあります。
Timmmm、

13

同じ問題が発生しました。その理由は、私が使用しようとしたライブラリが標準のJDK 7でコンパイルされていたからです。

-source 1.6 -target 1.6オプションを付けて再コンパイルしましたが、うまくいきました。


ありがとうございました!!!!!!!!!!!!!!!!! 私はこの問題に苛立ち、あなたはそれを解決しました!最新のJelly Bean 4.3 SDK(API 18)でも1.7のJAR /クラスを読み取ることができないのは少し皮肉なことです。そして最悪の場合、それはまったく文句をつけません:(
Hendy Irawan

私も同じ問題を抱えていました。最悪なのは、このオプションで考えた後、-source 1.7を-source 1.5に変更して(確かに)、問題が解決されなかったことです。しかし、あなたのコメントを読んだ後、私は1.6でもう一度試しましたが、それは魅力のように機能しました。
PedroNáñez2014

7

同じことが私にとってうまくいきました:プロパティ-> Javaビルドパス-> "注文とエクスポート"興味深いことに、なぜこれは自動的に行われないのですか?一部の設定が不足していると思います。また、これはSDKのアップグレード後に発生しました。


3

プロジェクトフォルダを右クリックし、Javaビルドパスでプロパティを探し、表示されたjarファイルを選択します。それは私のために働いています。



2

私はこの投稿(および他のいくつかの投稿)からすべてを試してみましたが、うまくいきませんでした。これは、これまでで最もひどいADTアップグレードであり、ADTバックアップが機能していないとアップグレードできません。

私はプロジェクトを削除し、それから私が持っていたソースバックアップを使用して再度追加することで、なんとか解決しました。


2

ADT22でも同じエラーが発生しました。プロパティ-> Javaビルドパス->注文とエクスポートで「Android Private Libraries」をチェックすることで解決しました。ライブラリプロジェクトを使用している場合は、それらについても同じことを行う必要があります。


それも私のために働いた。ライブラリを含めましたが、「注文とエクスポート」で確認するのを忘れていました。ありがとうございました!
jmrodrigg 2013年

2

私の場合は少し違うので、既存の答えはすべてうまくいきません。機能するまでに数時間かかりました。私はEclipseを使用しています。

私のAndroidプロジェクトには、サードパーティのjarファイルを必要とする別の通常のJava 1.6プロジェクトが含まれています。トリックは:

  • 通常のJavaプロジェクトにjarを含めてコンパイル(のみ)します。「注文とエクスポート」タブでチェックしないでください。
  • また、このjarファイルをandroidプロジェクトの「libs」フォルダーにコピーして、実行時に使用できるようにします

これが私のような同様のシナリオを持つ人々を助けることを願っています。


1

jarだけでなく、外部プロジェクト全体をライブラリとして取得する必要がある場合があります。

私の問題は、jarファイルだけでなく、プロジェクト全体(私の場合はgoogle-play-services_lib)をライブラリとして追加することで解決しました。それへのステップ(@style answerから):

  1. ファイル->新規->その他
  2. Androidプロジェクトを選択
  3. 「既存のソースからプロジェクトを作成」を選択します
  4. 「参照...」ボタンをクリックして、目的のプロジェクトに移動します
  5. 完了(ワークスペース内のアクションバープロジェクト)
  6. プロジェクトを右クリック->プロパティ
  7. Android-> LibraryセクションでAddをクリックします
  8. 最近追加されたプロジェクトを選択-> OK

1

依存関係のあるjarがAndroidManifest.xmlの「uses-libary」タグに含まれていないことが原因で発生する場合があります。

また、「application」タグ内にあることを確認してください。

よろしく、

ラビ


1

私はこの問題を抱えていましたが、それはライブラリを「エクスポート」していないことが原因でした。この問題は、APKをパッケージ化しているときに一部のクラスの.classファイルが利用できないために発生しました。

私の場合、「CusrsorAdapter」クラスを使用していて、「JavaBuildPath-> Order and Export」で、サポートV4 jarを確認しませんでした。選択すると、問題が発生しなくなります。

上記の理由によりnoClassDefFoundエラーが発生していることを確認するには、logacatを確認してください。実行時に不明なスーパークラスエラーが表示されます。



0

私はさまざまなことを試しましたが、私の場合のエラーの原因は、Javaビルドパス->ライブラリのmaps.jarとGoogle Apiの間の競合でした。だから、maps.jarを削除したときはうまくいきました。

よろしく、

ワヒブ


0

Eclipseで新しいADTバージョンを使用している場合は、jarファイルがプロジェクトのlibsディレクトリにあることを確認してください。


0

まったく同じ問題が発生しました...修正するには、「ビルドパス」でAndroid Private Libsを削除して[OK]をクリックしました。そしてそれは私のために働いた;)...


0

ADTを更新した後、この問題を解決するために2日間費やしました。最後に私はこの投稿をここで得ることができて幸運でした:

https://code.google.com/p/android/issues/detail?id=55304

私を正しい方向に導いてくれました。ソリューションに従うときは、すべてのプロジェクトのAndroidサポートライブラリを同じバージョンに置き換えることを忘れないでください(削除して、プロジェクトに再インストールします)。私はこれが役に立てば幸い-幸運


0

回避策がどのファイルに関連しているのかを知りたい場合は、こちらが見つかりました。.classpathファイルを

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

すべてのライブラリプロジェクトとメインのAndroidプロジェクトで.classpathファイルを置き換えます。.classpathファイルは、Eclipseプロジェクトのルートフォルダーにあります。独自のクラスパスエントリを追加することを忘れないでください(ある場合は、現在のバージョンの.classpathと比較してください)。

これは、上で説明したcomponavt-user(Eclipse /ビルドパスの構成/注文とエクスポート)としてEclipseメニューを実行した場合と同じ結果であると思います。


0

ソリューションは、ここに私のために働きました。ライブラリをlibsフォルダーにインポートし、build.gradleファイルを変更して、gradlewでクリーンアップするだけです。


0

順序を変更してプロジェクトのビルドパスでエクスポートする場合、このエラーは発生しません。これを実現するもう1つの方法は、プロジェクトフォルダーの.classpathを使用することです。


0

これを試して:-

ステップ1

Eclipseでビルドするすべてのライブラリーを追加します(つまり、すべてのライブラリーがライブラリーを参照するようにします)

ステップ2

R.javaファイルを削除して、もう一度プロジェクトをビルドします。心配しないでください。R.javaは自動的に再作成されます。

チル:)


0

私が理解したように、jarが含まれているため、プロジェクトにエラーは表示されません。ただし、プロジェクトがデバイスに「エクスポート」された場合、Jarは使用されません。これを試して

プロジェクト->プロパティ

Javaビルドパス/注文とエクスポート

[✔]あなたの瓶


0

これは非常に頻繁に起こります。

前回思い出したのは、Eclipse ADT(Google特別版)をAndroid Studioに切り替えて、元に戻したことです。私は基本的に、stackoverflowで見つけることができるすべての方法を試しましたが、うまくいきませんでした。

最終的に、ADTを使用してIDEを元のEclipse(Kepler)に切り替えることで、アプリは再び機能しました(NoCalssDeffoundErrorはなくなりました)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.