web-dev-qa-db-ja.com

AndroidメインアクティビティのアプリClassNotFoundException

ほとんどのデバイスでアプリを実行できますが、次のエラーレポートが表示されます。

Java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.company.app/com.company.app.MainActivity}: Java.lang.ClassNotFoundException: com.company.app.MainActivity in loader dalvik.system.PathClassLoader[/mnt/asec/com.company.app-1/pkg.apk]
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2755)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2854)
at Android.app.ActivityThread.access$2300(ActivityThread.Java:136)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:2179)
at Android.os.Handler.dispatchMessage(Handler.Java:99)
at Android.os.Looper.loop(Looper.Java:143)
at Android.app.ActivityThread.main(ActivityThread.Java:5068)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:521)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:858)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:616)
at dalvik.system.NativeStart.main(Native Method)
Caused by: Java.lang.ClassNotFoundException: com.company.app.MainActivity in loader dalvik.system.PathClassLoader[/mnt/asec/com.company.app-1/pkg.apk]
at dalvik.system.PathClassLoader.findClass(PathClassLoader.Java:243)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:573)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:532)
at Android.app.Instrumentation.newActivity(Instrumentation.Java:1034)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2747)
... 11 more

関連する答えがあることがわかりました: ClassNotFoundException Android

しかし、問題は、私の例外は私が書くコードの行の前に発生するということです、それでどうすればクラスローダーがロードされていることを確認できますか?

20
Kay Chan

私はまったく同じ問題を抱えていました。突然私のアプリが動作を停止しました。マニフェストに変更を加えませんでしたが、何らかの事故で最初の行が欠落していました。

<?xml version="1.0" encoding="utf-8"?>

これにより、ランチャーアクティビティにClassNotFoundExceptionが発生しました。私はそれと数時間苦労していましたが、マニフェストに間違いがないかチェックするたびにこれを見落としていました。

この行を再度削除した後、奇妙なことが起こりました。サプライズ、サプライズアプリはまだ機能していました。 (そして私はアプリを再構築することを忘れませんでした)

これが誰かが数時間を節約するのに役立つことを願っています。

20
SocialError

クラスがマニフェストで正しく定義されていない場合、通常、次のように正しい名前空間を入力していないため、このエラーが発生します。

    <activity Android:name="com.company.project.main.MyMainActivity" ...>

とは対照的に

    <activity Android:name="MyMainActivity" ...>

一部のデバイスでは機能し、他のデバイスでは機能しない理由はわかりません。

10
fredw

Eclipseを閉じて開いてください。プロジェクトをクリーンアップして更新します。次に、実行して確認します。

6
Anju

同じ問題が発生しましたが、問題はAndroidサポートライブラリを使用しているサードパーティのライブラリでした。

myproject/libs/Android-support-v4.jar 
3rdpartylib/libs/Android-support-v4.jar

ライブラリを新しいバージョンで更新すると、サポートライブラリも更新されましたが、プロジェクトにはありませんでした。その後、このエラーでアプリケーションを起動できませんでした。両方のライブラリを同じ(コピー)にした後、それは大丈夫でした。

3
luben

Eclipseで、「プロパティー」>「Javaビルドパス」>「ソース」をチェックし、出力フォルダーが常にデフォルト(/ bin/classes)であるかどうかを確認します。

私にとって、これはmavenプラグインが原因で問題になりました。右クリック> Maven> Update Project ...> Okを押すと、srcフォルダーの出力フォルダーがtarget/classesに変更され、ClassNotFoundExceptionが発生します。

2
Cristan

私はこの数日間この問題を抱えていました。すべてのテスト環境でアプリを実行でき、リリースapkをエクスポートして、すべてのテスト環境にインストールして実行できましたが、apkをPlayストアにアップロードし、Playストアからインストールすると、アプリは4回閉じてClassNotFoundExceptionがスローされました。 。私のプロジェクトでは、マルチパートフォームデータをWeb APIに送信していたことが判明しました。これを行うには、いくつかの外部ライブラリが必要です。最初は、すべてのmim4jhttpclient、およびhttpcore.jarsを含めました(多くのjarファイルであることが判明しました)。

それらのほとんどすべてを1つずつ削除し、プロジェクトがまだビルドされるかどうかを確認した後、jarが1つだけ残っていました実際に必要でした。持ち帰りは、ビルドする必要のないjarを削除することです。次に、アプリをテストしたところ、プロジェクトのビルドに必要なリソースがリソースを参照していたため、jarファイルの1つを追加し直す必要があることがわかりました。 jarファイルを削除した後は、必ずアプリのすべての機能をテストしてください。

次に、含めた各ライブラリプロジェクトを確認し、project -> properties -> Java build path -> order and exportを右クリックして、すべてのチェックボックスをオンにしましたすべてのライブラリ用および自分のパッケージ

次に、含まれているすべてのプロジェクトとメインプロジェクトでproject -> cleanを実行しました。

次に、apkをエクスポートし、ベータテスト用にパッケージを作成しました。最終的にユーザーのデバイスで動作しました。

1
Kyle O.

上記の答えはどれも私にはうまくいきませんでした。将来誰かに時間を割くことができるなら、私の解決策に貢献します。

どうやら私のために働いたのは、私のプロジェクトで余分なサポートlib v4jarを削除することでした。

Androidツールを使用してサポートライブラリを更新した後、使用する多くのライブラリでjarの不一致を修正し、それらすべてをAndroid-sdksフォルダー内の同じjarにポイントする必要がありました。

誤ってプロジェクトにも追加しましたが、使用していたAndroid-support-v7-appcompatライブラリにもjarが含まれていたため、何らかの理由でMainActivityクラスが実行時に見つかりませんでした。

Eclipseではエラーはまったくありません。

プロジェクトからjarを削除し、[エクスポート]タブのv7 appcompatライブラリでjarをチェックして、プロジェクトでも使用できるようにしました。アプリは機能しています。

1
Jjang

この問題が発生し、 this を使用して修正されました。

「注文とエクスポート」で1つの外部ライブラリをチェックしていなかったので、エラーが発生していました。

1
Abhinav

次のフォルダのコピー/貼り付けを新しいプロジェクトに作成しました同じパッケージ名を維持、それを解決しました:

  • ../src/debug
  • ../src/main
  • ../src/release

そして最後に、ファイルの依存関係を追加しましたbuild.gradle

GL

0
CORONEL Braian

バージョン管理のおかげで、.classpathxmlファイルに次の行がないことに気付きました。

<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>

これらにより、メインアクティビティでClass-not-foundが発生しました。

0
NoBugs

Robolectricテストを実行するときも同じです。実際、テストクラスパスには、Android.com.Activityを含むjarが含まれていますが、これは確立されていません。私の場合の解決策は、Mavenプロジェクトで使用されている10番目のJDKバージョンからJava_HOMEをダウングレードすることです。

0
user9783351

私はちょうどこの問題に遭遇しました。 MainActivityを新しいパッケージに移動したことが原因であることがわかりました。

私がしたことはそれをから移動することでした

com.example.MainActivity

Activity

だから私のマニフェストでは次のようになりました:

 Android:name="Activity.MainActivity"`

元のパッケージに戻すことで解決しました。パッケージの名前を正しく変更することでも解決できます。

例:com.example.Activity.MainActivity

これが誰かを助けることを願っています。

0
nedaRM