53

初めての Android アプリを作成して公開しました。とても簡単です。シミュレーターと一部の電話では問題なく動作しますが、次のエラーが発生します。

java.lang.RuntimeException: Unable to instantiate application cz.teamnovak.droid.Novak ESC Track guide: java.lang.ClassNotFoundException: cz.teamnovak.droid.Novak ESC Track guide in loader dalvik.system.PathClassLoader[/data/app/cz.teamnovak.droid-1.apk]
    at android.app.ActivityThread$PackageInfo.makeApplication(ActivityThread.java:649)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4232)
    at android.app.ActivityThread.access$3000(ActivityThread.java:125)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2071)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:4627)
    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:868)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: cz.teamnovak.droid.Novak ESC Track guide in loader dalvik.system.PathClassLoader[/data/app/cz.teamnovak.droid-1.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.newApplication(Instrumentation.java:942)
    at android.app.ActivityThread$PackageInfo.makeApplication(ActivityThread.java:644)
    ... 11 more

何がこれを引き起こす可能性がありますか?

4

26 に答える 26

40

はい、まったく同じ問題がありました。android:nameマニフェストファイルのアプリケーションノードに属性を指定したためでした。

Android マニフェスト ファイルは、おそらく次のようになります。

   <application 
       android:name="Novak ESC Track guide" 
       android:icon="@drawable/icon" 
       android:label="@string/app_name" 
       android:description="@string/help_text" >

android:name属性を使用しないでください。カスタム Application オブジェクトを実装していない限り。

このapplication:name属性は、アプリの名前とは関係ありません。Applicationこれは、インスタンスとしてロードする特定のクラスの名前です。ClassNotFoundExceptionそれが、そのクラスが存在しない場合に取得する理由です。

アプリの名前には、android:label代わりにこの同じアプリケーション ノードの属性を使用します。

それを削除すると、動作するはずです:

<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:description="@string/help_text" >
于 2011-02-22T19:34:55.233 に答える
14

ビルド ターゲットを 3.2 に変更すると、このようなことが起こりました。調べてみると、jar lib フォルダーの名前が「libs」ではなく「lib」であることがわかりました。名前を libs に変更し、Java ビルド パスの参照を更新したところ、すべてが再び機能していました。多分これは誰かを助けるでしょう...

于 2012-04-03T20:53:15.340 に答える
10

Android マーケットで時々この問題が記録されたプロジェクトがいくつかあります。マニフェストに次の問題が見つかりました。

  1. パッケージ名が com.test の場合、アクティビティ名.ActivityNameActivityName.

  2. ログに最も頻繁に表示される一部のクラスでは、クラス名が と指定されcom.test.Nameているはずでしたが、 と指定されていました.Name

Android の多くの実装では、これらの小さな問題をうまく処理していると思います (これが、テストで例外が発生しなかった理由です) が、例外をスローする実装はほとんどありません。

于 2011-10-11T15:01:03.470 に答える
5

同じエラーが発生しました: java.lang.RuntimeException: Unable to instantiate activity (classnotfound) FIRST try to change the build platform (2.3.3 -> 2.2 -> 2.3.3) がうまくいきました。

于 2012-08-02T06:40:19.613 に答える
5

これは、エラーに関する私の観察です。最近、ADT を 22.0.1 に更新しました。以前のプロジェクトをインポートすると、 「E/AndroidRuntime(24807): 原因: java.lang.ClassNotFoundException: com.sherl.sherlockfragmentsapp.StartActivity in loader dalvik.system.PathClassLoader[/data/app/com. sherl.sherlockfragmentsapp-1.apk]"

次に、「Properties->Java Build Path-> Order and Export」を次のように変更しました[フォーラムのルールのため、画像を追加できません]

  1. Android プライベート ライブラリ - チェック済み
  2. Android 4.2.2 - チェックなし
  3. Android の依存関係 - チェック済み
  4. /src - 選択済み
  5. /gen - 選択済み

問題を解決しました。これが皆さんを助けてくれることを願っています。

于 2013-07-22T10:15:29.183 に答える
4

日食で時々この問題が発生します。私にとってそれを修正したのは、Project Properties / Android に移動し、ビルド ターゲット API を別のバージョンに変更して再公開することです。それが修正されたことがわかります。その後、目的のビルド ターゲットに戻すことができます。

また

proguard.cfgを確認する必要がある場合があります。

ライブラリを適切にリンクし、ライブラリ プロジェクトにエクスポート用にマークする必要があるコードがあると仮定すると、次のステップは、proguard 設定を確認し、必要なクラスを削除していないことを確認することです。

アプリをEclipseからエミュレーターまたはデバイスに直接接続して動作させた後、私はこれにかなり苦労していました。私が抱えていた問題は、アプリが公開された後 (つまり、proguard を通過した後)、プロジェクトに含まれていたクラスが欠落していたデバイスで実行されたことでした。彼らはどういうわけか剥ぎ取られていました。

私の問題は、IntelliJ を使用しようとして Eclipse に切り替えたときに発生した可能性があります。

これが私のために働いたプロガードファイルです:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembers class * {
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}
于 2012-04-06T16:27:36.017 に答える
4

以前のバージョンの Android でアプリを実行したときに、このエラーが発生しました。SearchViewは Android 1.5 と下位互換性があると思っていましたが、3.0 で作成されました。コードから参照を削除したところ、機能しました。

于 2012-07-16T01:11:03.500 に答える
4

私はこの質問が答えられたことを知っていますが、おそらくそうではありませんでした. しかし、私はこのエラーを受け取っていたので、他の人に役立つ場合に備えて理由を投稿すると考えました.

そのため、このエラーが発生していました。数時間後、「プロジェクト>自動ビルド」のチェックを外したことに気がつきました。コンパイルエラーはありませんでしたが、これがこのエラーが発生した理由です。展開する前に実際にプロジェクトを構築していないことに気付くとすぐに、すべてが機能し始めました:-/

まあ、それは私の話です:-)

于 2011-09-02T17:56:33.100 に答える
3

マニフェストファイルでandroid:hasCode設定されていないことを確認してください。falseこれが私にとって問題を解決したものです!

于 2011-11-16T19:24:41.927 に答える
3

私の場合、メイン アクティビティのマニフェスト ファイルでは android:name=".activity.SkeletonAppActivity" なく、追加する必要がありました。アプリケーション クラスとは別のパッケージに含まれていました。幸運を!android:name=".SkeletonAppActivity"SkeletonAppActivity

于 2011-09-14T16:03:05.703 に答える
2

Class Not Foundエラーは、クラスファイルが欠落していることを示しています。[プロパティ]>[Javaビルドパス]に移動し、不足していることがわかった場合 は、Javaファイルを含むパッケージを[ソース]タブに追加してください 。次に、プロジェクトをビルドします。これにより、欠落している.classファイルが作成されます。

于 2012-08-02T05:40:20.297 に答える
2

アクティビティの1つで「final」と宣言されたスーパータイプメソッド(具体的には「isResumed()」メソッド)を使用しました。実際のエラーは、開発デバイスを再起動した後にのみLogCatに表示されました。

于 2012-07-30T13:51:01.287 に答える
2

さて、java.lang.ClassNotFoundException があります。これは、アプリケーションの実行時にクラスが欠落していることを意味します。すべてのライブラリをビルド パスに追加したかどうかを確認する必要があります。

プロジェクトを右クリック -> プロパティ -> Java ビルド パス -> ライブラリ、ライブラリを追加するか、クラスを含むライブラリを作成し、ライブラリのオーダー エクスポートを有効にします。

于 2010-09-23T18:11:41.917 に答える
2

私の場合、アプリのアイコンがエラーの原因でした:

<application
    android:name="com.test.MyApp"
    android:icon="@drawable/myicon"

なんで?アイコンを「drawable」フォルダーにのみ配置し、高解像度のテストデバイスを使用しているため、アイコンのフォルダー「drawable-hdpi」を検索します。他のすべてのデフォルトの動作は、「drawable-hdpi」にない場合、「drawable」のアイコンを使用することです。しかし、起動アイコンの場合、これは有効ではないようです。

したがって、解決策は、アイコンのコピーを(もちろん同じ名前で)「drawable-hdpi」(またはデバイスでサポートされている解像度)に配置することです。

于 2012-06-11T14:41:00.013 に答える
2

私は最近、プレイストアのエラーレポートを通じて私に届いた同様のエラーレポートに時間を投資しました.

いくつかの考えられる原因の概要。

ライブラリがありません

私のアプリはリリース前にテストされており、問題が発生するのは約 1 回だけです。週に一度、私のものは図書館の問題ではないと確信しています。システムでのビルドが失敗し、ADB を使用してアプリをインストールすると起動時にエラーが発生する場合は、この方向で検討する必要があります。

これがローカルの問題である場合は、プロジェクトのクリーニングとビルドが役立つ可能性があります。また、SDK と IDE の両方が最新バージョンであることを確認してください。

このような場合、アプリの 1 つのクラスまたはアプリで使用されているライブラリがエラーをトリガーします。これは、アプリのエントリ ポイント (メイン インテントを持つアクティビティまたはカスタム サービス/アプリケーション オブジェクト) が見つからない次のポイントとの重要な違いです。

その場合は、私が選択した次の質問と回答を調べてください。それらはすべて受け入れられた答えを持っています。

アプリケーションをインスタンス化できません - ClassNotFoundException Android Activity ClassNotFoundException - すべてを試しました Android ClassNotFoundException

メイン アクティビティまたはアプリケーションが見つかりません

AndroidManifest.xml の設定ミス

Androidマニフェストファイルについて話している回答の1つで、初心者の間違いのようなものが以前にここで引用されました。

ここで重要なのは、このエラーが常にアプリの読み込みをブロックすることです。ただし、ビルドする必要がありますが、最初の使用でクラッシュします。

私はその答えを編集しました、これは重要な部分です:

android:name 属性は使用しないでください。カスタム Application オブジェクトを実装していない限り。

application:name 属性は、アプリの名前とは関係ありません。これは、Application インスタンスとしてロードする特定のクラスの名前です。そのため、そのクラスが存在しない場合は ClassNotFoundException が発生します。

アプリの名前については、代わりにこの同じアプリケーション ノードの android:label 属性を使用します。

抑制: java.io.IOException: DEX ファイルを開けません

今、面白くなってきました!これは、私の場合、playstore を通じてログに記録されたスタック トレースの一部です。そのため、ビルドを作成してデバイス上でエラーなしで実行できます (以前のすべてのエラーは実行を妨げます)。

次のSO質問に重要なコメントがありましたAndroid Application ClassNotFoundException, Unable to instantiate application

システムでアプリケーションの dex ファイルを開く際に問題があるようですマニフェスト。— user2046264 27 2 月. 142014-02-27 02:25:00

ここで重要な部分は、抑制された IOException です。これは、IO 操作が失敗したことを示します。IO 操作の例としては、ネットワークとストレージの呼び出しがあります。

その方向に進む別のエラー レポートは、Android から Unable to instantiate Application java.lang.ClassNotFoundException: にリストされており、SD カードによって提供される外部ストレージの役割が言及されています。

他のいくつかの同様の質問は、これがユーザー エラーである可能性があることを示しています。「/mnt/asec/...」は、アプリが SD カードから実行されていることを示します。SD カードが取り外されると、このエラーが発生する可能性があります。マニフェストで許可されていない場合でも、サードパーティのアプリまたはルート化されたデバイスは、おそらくアプリを SD カードに移動できます。

他にもいくつかのパスがリストされているため、必死になっている場合は、その質問に対するすべての回答を読んでください。完全なパッケージ仕様、シングルトンの使用などを考えてください。

ここでのポイントは、ネットワークとストレージの両方が IO であるということです。

私の特定のケースでは、このエラーを報告したすべてのデバイスをチェックしたところ、それらすべてが外部ストレージをサポートしていることがわかりました。そのため、ユーザーはアプリをインストールして外部ストレージに移動し、SD カードを取り外してこのエラーを取得することができます (単なる理論であり、テストされていません)。

installLocation オプションの詳細については、http: //developer.android.com/guide/topics/data/install-location.html を参照してください。

ネットワークも考えました。Play ストア レポートのスタック トレースの詳細ページの上部に、時間の経過に伴うエラーの発生の概要が表示されます。

アップデートがリリースされた頃にエラーが発生したように見えました。これは、ユーザーがアプリの更新を取得し、この更新をダウンロードすると何らかの形で破損するという理論を支持する可能性があります。インストールは正常に行われますが、アプリの最初の実行でエラーが発生します (これも単なる理論であり、テストされていません)。

その他のリソース

最後に、役立つ可能性のある 2 つの SO 以外のリソース:

https://groups.google.com/forum/#!topic/android-developers/JC7_qqwBRjo https://code.google.com/p/android/issues/detail?id=72121

于 2015-05-08T13:44:04.093 に答える
0

Applicationクラスを指すClassNotFoundExceptionがありました。

.projectでJavaビルダーを見逃していることがわかりました

buildSpecに何かが欠けている場合は、Eclipseを閉じ、すべてが適切に配置されていることを確認して、Eclipseを再起動します。

        <buildSpec>
            <buildCommand>
                    <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
                    <arguments>
                    </arguments>
            </buildCommand>
            <buildCommand>
                    <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
                    <arguments>
                    </arguments>
            </buildCommand>
            <buildCommand>
                    <name>org.eclipse.jdt.core.javabuilder</name>
                    <arguments>
                    </arguments>
            </buildCommand>
            <buildCommand>
                    <name>com.android.ide.eclipse.adt.ApkBuilder</name>
                    <arguments>
                    </arguments>
            </buildCommand>
    </buildSpec>
于 2013-01-15T13:26:26.340 に答える
0

たとえば、Dropboxなどを使用して、さまざまな環境でコードを使用していますか?図書館などを利用していますか?ワークスペースファイルを共有した後、多くの問題が発生し、依存関係を再構成して修正しました。それが誰かを助けることを願っています!

于 2011-09-06T21:36:46.423 に答える
0

私の場合、マニフェスト ファイルを更新せずにランチャー アクティビティを別のパッケージに移動したときに発生します。

于 2012-11-02T05:05:33.117 に答える
0

クラスのパッケージ名がマニフェスト ファイルのパッケージ名と一致するかどうかを確認します。これは私のために働いた

于 2012-03-27T11:21:22.457 に答える
0

Android Studio の場合に役に立ったこと: 大きなプロジェクトのパッケージの名前を変更した後に問題が発生しました。そのため、AS が提供するほぼすべてのことを実行して、プロジェクトを正式にクリーンアップして更新しましたが、うまくいきました。Android Studio を使用している場合に備えて、これがすべての人にとっての解決策であると言っているわけではありません。Android Studio 3.5.1、Windows 10 で行われました。

  • アレックスの答え
  • ビルド > プロジェクトの消去
  • ビルド > プロジェクトの再ビルド
  • ファイル > ファイル システムと同期
  • ファイル > プロジェクトを Gradle ファイルと同期する
  • ファイル > キャッシュの無効化 / 再起動
于 2019-11-05T08:24:22.983 に答える
-2

私にとっては、Eclipse からアプリケーションを「閉じ」、プロジェクトを「再度開く」ことで問題が解決しました。

于 2014-04-07T07:06:09.260 に答える