ユーザー間で頻繁にエラーが発生します。起動中にアプリがクラッシュします。 MainActivityがロードされることになっている場合、VMは明らかにクラスを見つけることができません。理由がわかりません。アプリのアーキテクチャは、無料版とプロ版の両方が使用している共通のプロジェクトがあることです。それが関連するかどうかわからない。以下のスタックトレースを参照してください。何かご意見は?
Java.lang.NoClassDefFoundError: com.Android.common.MainActivity
at com.mycompany.myapp.Splash.onCreate(Splash.Java:23)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1047)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1615)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:1667)
at Android.app.ActivityThread.access$1500(ActivityThread.Java:117)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:935)
at Android.os.Handler.dispatchMessage(Handler.Java:99)
at Android.os.Looper.loop(Looper.Java:130)
at Android.app.ActivityThread.main(ActivityThread.Java:3687)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:507)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:842)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:600)
at dalvik.system.NativeStart.main(Native Method)
Caused by: Java.lang.ClassNotFoundException: com.Android.common.MainActivity in loader dalvik.system.PathClassLoader[/system/framework/com.google.Android.maps.jar:/data/app/com.Android.pro-1.apk]
編集:以下のコメントをありがとう、リチャード。 com.Android.Splash
を別のものに変更しました。とにかく実際のクラス名ではありませんでした。私の悪い...!
私は同じ問題を抱えていました。問題を解決するために次のことをしました。
gen-プロジェクトの自動化されたコード(依存関係と参照から)
src-プロジェクトのソースコード
Eclipseを再起動する必要はありませんでした。動き始めたばかりです。
正直なところ、「Androidツール>プロジェクトプロパティの修正」を試したことはありませんが、同じことをしている場合もあります。私は知りません。エラーメッセージを見た後、ビルドパスに何か問題があると思った後、上記のようにしました。
編集
後でそれは十分ではなかった、私は再びエラーを取得していました。次に、そのビューにリストされているすべての依存関係を「チェック」しました。今では再び動作します。ここまでは順調ですね。再度失敗した場合は、これを更新し続けます。
FYI:前回の試みで、「Androidツール>プロジェクトプロパティの修正」を試しましたが、うまくいきませんでした。
現在、SDK 20.0.3を使用していますが、以前のソリューションはどれも役に立ちませんでした。
私は物事を機能させることができました
これにより、Javaプロジェクトのビルド時にVM JavaではなくDalvik VM用にコンパイルされたAndroidクラスファイルが作成されました。これにより、Javaプロジェクトの.apkが作成されたときに、Androidライブラリjarファイル内のAndroidクラスファイルがデキシングを実行できました。これで、アプリの実行時に、Java.lang.NoClassDefFoundErrorがスローされる代わりに、Javaプロジェクトクラスが見つかりました。
ソースをリンクする代わりにjarファイルを使用する場合は、ライブラリAndroidプロジェクトを作成する必要があります。 ([プロパティ]-> [Android]で[ライブラリ]がオンになっているAndroidプロジェクト。)JavaプロジェクトのソースをAndroidライブラリプロジェクトにリンクする必要があります。または、ソースファイルをJavaプロジェクトの 'src'フォルダーからAndroidライブラリプロジェクトの 'src'フォルダーにコピーします。 Android Libraryプロジェクトをビルドします。次に、Androidフォルダーの 'libs'フォルダーに作成されたAndroidプロジェクトjarファイルをコピーできます。これは、その中のクラスファイルがDavlik VMの代わりにコンパイルされたためです。 JavaプロジェクトがビルドされたときのVM Android。これにより、Javaプロジェクトの.apkが作成されたときに、AndroidライブラリjarファイルのAndroidクラスファイルがdexingを実行できます。これで、アプリが実行されると、Java.lang.NoClassDefFoundErrorがスローされる代わりに、Javaプロジェクトクラスが見つかります。
[プロジェクト]-> [プロパティ]-> Javaビルドパス-> [注文とエクスポート]に移動して、プロジェクトおよび使用している他のすべてのライブラリプロジェクトのAndroidプライベートライブラリを確認します。以下のリンクに従って解決策を得ました NoClassDefFoundError Android Project ?
それが誰かを助けるために、私は同じ問題に直面しました。私のjarファイルはlibsディレクトリの下にあり、jarはビルドパスに追加されました。それでも、それはその例外を投げていました。
私はちょうどプロジェクトをきれいにし、それは私のために働いた。
Eclipse->プロジェクト->クリーン->プロジェクトを選択してクリーン
上記のすべてのソリューションを試しましたが、うまくいきませんでした、プロジェクト->構成ビルドパス->順序とエクスポート->依存プロジェクトを上に移動する
このエラーは、Google API(Mapsなど)を使用するアプリを作成したが、Android APIをターゲットとするデバイスで実行した場合にも生成されます。
Java.nio.charset.StandardCharsetsを使用したときに、このNoClassDefFoundErrorが発生しました。
その理由は、StandardCharsetsはJRE 1.7まで存在しなかったためです。 Javaコンパイルバージョンを1.7に設定すると、Eclipseは「Androidにはコンパイラー準拠レベル5.0または6.0が必要です」と不平を言いました。そのため、プロジェクト名を右クリックして、[Androidツール]、[プロジェクトプロパティの修正]の順にクリックして修正しました。 JRE1.6でコンパイルされます。
ただし、StandardCharsetsは1.7まで存在しなかったためです。実行したときにNoClassDefFoundErrorが報告されました。
JDKの再インストールを含む他の多くの方法を試した後、私はこれに気づきませんでした。本当の理由は、NoClassDefFoundErrorの意味によって明確に示されています。コンパイルに合格しましたが、実行時にクラスが見つかりません。
一般的な結論としては、AndroidがJRE 1.7で機能しない限り、1.7以降で提供される新しい機能を使用すると、このエラーが発生します。
私の解決策は、それらのソースコードをコードにコピーすることです!
NoClassDefFoundErrorの説明は、SOタグからのものです。
Java仮想マシンまたはClassLoaderインスタンスが(通常のメソッド呼び出しの一部として、または新しいインスタンスの作成の一部として)クラスの定義を読み込もうとした場合にスローされるJavaエラー新しい式を使用して)クラスの定義が見つかりませんでした。検索対象のクラス定義は、現在実行中のクラスがコンパイルされたときに存在していましたが、定義はもう見つかりません。
またはそれ以上:
JavaのNoClassDefFoundErrorは、Java仮想マシンがコンパイル時に使用可能な実行時に特定のクラスを見つけられない場合に発生します。
from this ページ。チェックしてください。エラーを解決する方法がいくつかあります。役に立てば幸いです。
私の場合、jre 1.7でコンパイルされた通常のJavaクラスを(通常のJavaプロジェクトから)jreでコンパイルされたAndroidアプリプロジェクトに追加しようとしました1.7。
解決策は、通常のJavaクラスをjre 1.6で再コンパイルし、(jre 1.6でコンパイルされた)Androidアプリプロジェクトへの参照を通常どおり(タブオーダーとエクスポートで必ずクラス、プロジェクトなどを確認してください。
Androidライブラリを使用して外部の通常のJavaクラスを参照するときの同じプロセス。
通常のJavaクラスを通常のJavaプロジェクトからコンパイルし、AndroidアプリまたはAndroidライブラリプロジェクト。
通常のJavaクラスを使用しない場合(通常のJavaプロジェクトから)、jre 1.6にダウングレードする必要はありません。
私にとって、この問題は、デプロイされていないAPIに関連していた。たとえば、参照としてZSDK_API.jar
を使用しました。
この問題を解決するには、プロジェクトを右クリックしてプロパティを選択する必要がありました。 Java BUILD PATHから、デプロイされていないAPIを追加する必要がありました。アプリが見つからないMainActivityクラスをスローし、実際にはエラーはDiscoveryHandlerクラスが見つからないことが原因であるため、これは奇妙でした。
これが誰かを助けることを願っています。
オンAndroid Studio:
1)にmultiDexEnabled = true
を追加default Config
2)コンパイルを追加com.Android.support:multidex:1.0.0に依存関係
)Application class
extend MultiDexApplication
単なるApplication
の代わりに
プロジェクトに存在するクラス(ライブラリクラスではない)のNoClassDefFoundErrorに出会いました。クラスは存在しますが、NoClassDefFoundErrorが発生しました。私の場合、問題はマルチデックスのサポートでした。問題と解決策はこちらです: Android Multidex and support libraries
5.0より前のAndroidバージョンでこのエラーが発生します。
他のアイデア。たとえば、「Android.support.v4.app.Fragment」から派生したクラスがあります。
ただし、間違えて「Android.app.Fragment」から継承しました。次に、Android 2デバイスでこのエラーが発生します。
共通ライブラリの作成時にjavac
のターゲットを指定しないので、javac
は利用可能な最新のターゲット(おそらく1.7(Java7)または1.8(Java8))を自動的に使用します。
それはすでに述べられています
Androidには、コンパイラー準拠レベル5.0または6.0が必要です
dx
Androidのビルドツール<19.0.0では、Java7(またはそれ以上)バイトコードをDalvikバイトコードに変換できません。
したがって、ビルドツールバージョン> = 19.0.0を使用するか、またはjavac
を-target 6とともに使用して、たとえばant build.xml
を次のように変更します。
<javac
srcdir="src/"
destdir="build/"
target="6"
/>
このエラーで何かを見つけたところです。
ライブラリjarファイルにAndroid.support.v7.appcompatパッケージの下にコンパイル済みのRクラスが含まれていることを確認し、Android_SDK_HOME/extras/Android/support/v7/appcompatフォルダーのv7 appcompatサポート「プロジェクト」のすべての解像度をコピーします。
NetbeansをAndroidプラグインと一緒に使用すると、問題が解決しました。
上記のいずれも機能しなかった場合(私の場合)、Eclipseの別のプロジェクトをライブラリとして使用しています。
そうします:プロジェクトを右クリック->プロパティ-> Android->ライブラリ->追加
それは私のためにそれをしました! プロジェクトをライブラリとして追加する(プロジェクトプロパティ)
jarは以前はlib /フォルダーにありましたが、現在はlibs /にあります。libを使用する場合、jarをlibからlibsに移動し、Androidのためにプロジェクトプロパティ/ Javaビルドパスから依存関係を削除できます_は自動的にそれらを見つけます。
ソリューション:
マニフェストにアクティビティが再び追加されました。マニフェストで試したところ、アプリが動作しました。
<activity
Android:name="com.xxx.xxx.MainActivity"
私にとって問題は、参照ライブラリがJava 7を使用して構築されたことでした。1.6JDKを使用して再構築することでこれを解決しました。
Project.propertiedにライブラリプロジェクトパスを手動で追加して、この問題を修正しました。 Eclipseがこのエントリを「プロジェクトの追加」とともに自動的に追加しなかった方法。そのため、アプリがlibプロジェクト内のコンポーネントを参照しようとした時点でクラッシュしていました。
同じことを試すこともできます。 projec.propertiesのアプリ依存
Android.library.reference.1 = ....\Android-sdks\extras\google\google_play_services\libproject/google-play-services_lib
実行します。
時々Java.lang.NoClassDefFoundError:Dalvikランタイムの代わりにARTを使用するとエラーが表示されます。ランタイムを変更するには、開発者オプション->ランタイムの選択-> Dalvikに移動します。
に行ってみてください
役に立てば幸いです。