web-dev-qa-db-ja.com

動作中のアプリでのjava.lang.ClassNotFoundException

私は最初の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

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

51
Skoky

うん、まったく同じ問題があった。マニフェストファイルのアプリケーションノードで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" >
40
phreakhead

ビルドターゲットを3.2に変更すると、このようなことが起こりました。掘り下げた後、私はjar libフォルダに「libs」ではなく「lib」という名前を付けていたことがわかりました。 libsに名前を変更し、Javaビルドパスの参照を更新しましたが、すべてが再び機能しました。

14
hobbs

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

  1. パッケージ名がcom.testの場合、アクティビティ名はActivityNameだけでなく、.ActivityName(先頭のドット付き)でなければなりません。

  2. ログに最も頻繁に登場する一部のクラスでは、クラス名はcom.test.Nameとして指定されていましたが、.Nameである必要がありました。

Androidこれらの小さな問題を正常に処理する多くの実装(これがテストで例外が発生しなかった理由です)、他のいくつかは例外をスローしています。

10
Alex

同じエラーがありました:Java.lang.RuntimeException:Unable to instance a activity(classnotfound)FIRST try to change build platform(2.3.3-> 2.2-> 2.3.3)for work。

5
Mr G

これは、エラーに関する私の観察です。最近、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] "

その後、次の方法で「プロパティ-> Javaビルドパス->順序とエクスポート」を変更しました[フォーラムのルールのために画像を追加できません]

  1. Android Private Libraries-チェック済み
  2. Android 4.2.2-チェックなし
  3. Android依存関係-チェック済み
  4. / src-選択
  5. / gen-選択

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

5
lakshman

最新のADT/SDKにアップグレードした後、今日この種の問題を抱えていました。かなり時間がかかりました。 google-apis(マップ用)、uses-libraryの使用、プロジェクトのクリーンアップなどを確認しました。

.projectを削除して新しいものを追加する(新しいAndroidプロジェクトを作成する))と最終的に解決しました。

4
icyerasor

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

または

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

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

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

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

私のために働いたproguardファイルは次のとおりです。

-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 *;
}
4

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

4
Logan

私はこの質問に回答したことを知っていますが、そうではなかったでしょう。しかし、私はこのエラーを受け取っていたので、他の誰かに役立つ場合に備えて投稿するのではないかと考えました。

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

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

4
Joel Martinez

Android:hasCodeは、マニフェストファイルでfalseに設定されていません。これは私にとって問題を解決したものです!

3
lost_bits1110

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

3
Tenesh

私は最近、Playストアのエラーレポートを通じて私に届いた同様のエラーレポートにしばらく投資しました。

考えられる原因の概要。

不足しているライブラリ

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

プロジェクトのクリーニングとビルドは、これがローカルの問題である場合に役立ち、SDKとIDEの両方の最新バージョンを使用していることを確認できます。

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

その場合は、選択した以下の質問と回答をご覧ください。彼らはすべて受け入れられた答えを持っています。

アプリケーションをインスタンス化できない-ClassNotFoundExceptionAndroidアクティビティClassNotFoundException-すべてを試したAndroid ClassNotFoundException

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

AndroidManifest.xmlの構成の誤り

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

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

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

Android:name属性を使用しないでください!カスタムアプリケーションオブジェクトを実装していない限り。

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

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

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

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

以下に重要なコメントがなされましたSO question Android Application ClassNotFoundException、アプリケーションをインスタンス化できません

システムがアプリケーションdexファイルを開くのに問題があるように見えますJava.io.IOException:DEXファイルを開くことができません。これはクラスがロードされる前であるため、アプリケーションクラスの定義方法とは何の関係もありませんマニフェスト。 – user2046264 14年2月27日2:25で

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

その方向に向かう別のエラーレポートは Androidからアプリケーション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_qqwBRjohttps://code.google.com/p/Android/issues/detail? id = 72121

2
hcpl

私の場合、アプリのiconがエラーの原因でした。

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

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

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

2
Ixx

さて、Java.lang.ClassNotFoundExceptionがあります。つまり、アプリケーションランタイムにクラスがありません。すべてのライブラリをビルドパスに追加したかどうかを確認する必要があります。

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

2
Artjom Zabelin

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

2
Rich Ehmer

クラスが見つからないというエラーは、クラスファイルが見つからないことを示しています。 Properties> Java Build Pathに移動し、Javaファイルを含むパッケージをSource =タブが見つからない場合は、プロジェクトをビルドすると、不足している.classファイルが作成されます。

2
rino

Android os version 4.1.2でも同じ問題があります

アプリケーションタグのAndroidManifest.xmlの下のAndroid:label="@string/app_name"に以下の行を追加します

Android:name="Android.support.multidex.MultiDexApplication"

これは、同じ問題のある人を助けるかもしれません。

0
CLIFFORD P Y

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

0
Droidme

minifyEnabledfalseに設定するbuild.gradleファイルは私のために問題を修正しました。

release {
    minifyEnabled false
}
0
Chris Stillwell

私にとっては、プロジェクトをきれいにするだけでした。

プロジェクトをクリーンアップし、再度実行しました。そして、すべてのエラーが消えました。

0
Khemraj

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>
0

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

0
Kishore

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

0
Dani bISHOP