残念ながら、MyAppは停止しました。どうすればこれを解決できますか?


787

アプリケーションを開発していて、実行するたびに次のメッセージが表示されます。

残念ながら、MyAppは停止しました。

これを解決するにはどうすればよいですか?


この質問について-明らかにスタックトレースとは何かからインスピレーションを得て、それを使用してアプリケーションエラーをデバッグする方法を教えてください。、それ以上の詳細なしで彼らのアプリケーションがクラッシュしたことを述べている多くの質問があります。この質問は、Androidの初心者に問題を自分で解決する方法を教えるか、適切な質問をすることを目的としています。


22
私は多くの質問がこれにだまされて閉じられているのを見ました。これは、人々が質問に関連するデータを投稿するのに役立つ優れたリファレンスです。ただし、これは根本的な問題の複製ではなく、根本的な問題を掘り下げるための方法論にすぎません。この質問へのリンクを参照として提供し、重複するようにクローズしない方がよいと思います。
laalto 2014年

33
これにはclose関数が最適だと思います。これらの質問のほとんどは、基本的なデバッグスキルの知識がほとんどありません。それらを保留にすると、回答に記載されている方法を使用して、問題を明確にする機会が提供されます。さらに良いことに、彼らは問題を自分で解決できるかもしれません。ただし、このディスカッションはmeta.stackoverflow.comに適しています。
nhaarman 2014年

この質問はあいまいです。より良い質問は、「[残念ながら、MyAppが停止しました]というエラーが表示されるAndroidアプリケーションを[[myIDE]どうやってデバッグするのですか」
クリスハルクロウ

7
@ChrisHalcrowこのQ / Aはデバッグに関するものではありません。Androidの初心者がアプリのクラッシュに対処する方法を説明することです。
nhaarman 2015年

stackoverflow.com/questions/26609734/… .. apkへの変換でmultidex becozエラーを有効にする
RejoylinLokeshwaran

回答:


719

この回答では、スタックトレースを取得するプロセスについて説明します。スタックトレースはすでにありますか?「スタックトレースとは何ですか。また、それを使用してアプリケーションエラーをデバッグするにはどうすればよいですか?」のスタックトレースを確認してください

問題

キャッチRuntimeExceptionされなかったため、アプリケーションが終了しました。
これらの中で最も一般的なのはNullPointerExceptionです。

それを解決するには?

Androidアプリケーションがクラッシュするたびに(または、JavaアプリケーションもStack trace同様に)、コンソール(この場合はlogcat)にが書き込まれます。このスタックトレースには、問題を解決するための重要な情報が含まれています。

Android Studio

Android Studioでスタックトレースを見つける

ウィンドウの下部のバーで、Logcatボタンをクリックします。または、alt+ を押します6Devicesパネルでエミュレータまたはデバイスが選択されていることを確認します。次に、赤で表示されているスタックトレースを見つけます。logcatに多くのものが記録されている可能性があるため、少しスクロールする必要がある場合があります。スタックトレースを見つける簡単な方法は、logcatをクリアし(右側のごみ箱を使用)、アプリを再度クラッシュさせることです。

スタックトレースを見つけました。

わーい!あなたはあなたの問題を解決する途中です。
スタックトレースを分析することで、アプリケーションがクラッシュした正確な原因を見つけるだけです。

「スタックトレースとは何ですか。また、それを使用してアプリケーションエラーをデバッグするにはどうすればよいですか?」のスタックトレースを確認してください

それでも問題を解決できません!

あなたExceptionとそれが発生した行を見つけても、それを修正する方法がわからない場合は、遠慮なくStackOverflowで質問してください。

できるだけ簡潔になるようにしてください:スタックトレースと関連コードを投稿します(例:をスローした行までの数行Exception)。


33
私はこの投稿が古いことを知っています:IntelliJ IDEAを使用している場合は、内部に移動しAndroid > Devices|Logcatて新しいフィルター(i.imgur.com/145dtkx.png)を追加し、by Log MessageここでフィルターすることができますFATAL EXCEPTIONi.imgur.com/HpELhaU .png)したがって、このボックスExceptionsでは、アプリケーションによってスローされたすべてを読み取ることができます。これにより、logcatをクリアして再度クラッシュする必要はありません。Android Studioにもこのオプションがあると思います。
Marco Acierno 2014年

1
Eclipseでのlogcatのフィルタリングは、フィルターのアプリケーション名フィールドにJavaパッケージ名を入力することで実行できます。
ステファン

主なポイントは、例外が発生したときに取得するトレースバックを理解することだと思います。FCは、トレースバックがない場合や、使用可能なものがない場合にやや不良です。しかし、私はこの説明がそのようなバグを発見/特定するための素晴らしい最初の紹介だと思います。
DooMMasteR 2015

4
logcatにエラーの痕跡がある場合は簡単ですが、logcatに何もない場合はどうなりますか?stackoverflow.com/questions/32455645/...
マリアンPaździoch

4
問題は、行にスタックトレースによって書き込まれ、指摘されたエラーが含まれていないことです。
ヒラル

117

GoogleのADBツールを使用Logcat fileして、問題を分析できます。

adb logcat > logcat.txt

logcat.txtファイルを開き、アプリケーション名を検索します。失敗した理由、行番号、クラス名などの情報があるはずです。


これはすばらしいことです。デバッガーがデバイスの捕捉に失敗した場合でも、デバイスで実行されているすべてのことをすばやく表示します。これは、ランタイムのロードに失敗した場合にXamarinで発生する可能性があります。
jvenema

1
Android Studio Logcatでアプリがクラッシュする理由がわかりませんでした。エラーはまったく発生しませんでした。この答えは私に必要なものを与えてくれました。しかし、後で、スタジオのlogcatでフィルターをオンにしているため、エラーが表示されないことに気付きました。「選択したアプリケーションのみを表示」に切り替え、バックアップして実行していました。
Yannick 2015年

追加する必要があります。追加-dしない場合は、ctrl-Cに移動してlogcatを終了します。するadb logcat -v time -d > filename.txt
からくり

37

まず、アプリがクラッシュしたポイントを確認します(Unfortunately, MyApp has stopped.)。これには、を使用できますLog.e("TAG", "Message");。この行を使用すると、logcatでアプリのログを確認できます。

その後、アプリがどの時点で停止したかがわかりますので、簡単に解決できます。


28

log catでエラーを確認してください。

あなたは日食からlog catオプションを取得します:

ウィンドウ->ビューを表示->その他-> Android-> Logcat

ログ猫にエラーが含まれています。

それ以外の場合は、デバッグモードでアプリケーションを実行してエラーを確認することもできます。その後、まず次のようにしてブレークポイントを設定します。

プロジェクトを右クリック->デバッグ-> Androidアプリケーション


27

注:この回答はAndroid Studio 2.2.2を使用しています

注2: デバイスが正常に接続されたと考えています。


アプリケーションがクラッシュしたときに最初に行うことは、LogCatを調べることです。AndroidStudioの下部には、メニューのリストを含むツールバーがあります。

画像

「Android Monitor」(上の画像で下線を引いたものです。^)をクリックしてください。

今、あなたはこのようなものを得るでしょう:

画像

" Verbose"を " Error"に変更すると、ログに記録されたエラーのみが表示されます。これらのすべてのエラーについて(気が付いた場合)心配する必要はありません。

画像

OK。次に、アプリをクラッシュさせるために行った操作を実行します。アプリがクラッシュしたら、logcatに移動します。あなたはたくさんの持つ新しいクラッシュログを見つける必要があるat:x.x.xと:Caused by: TrumpIsPresidentExceptionたとえば。Caused by:logcatのそのステートメントに移動します。

画像

次のことCaused By:、起こった例外があるはずです。私の場合、それはaでRuntimeExceptionあり、その下に次のような青いリンクを含む行があるはずです。

画像

そのCaused by:下に青いテキストのある行がない場合は、別の行を探してくださいCaused by:

その青いリンクをクリックします。問題が発生した場所に移動するはずです。私の場合、それはこの行が原因でした:

throw new RuntimeException();

だから、なぜそれがクラッシュしているのかわかった。自分で例外を投げているからです。これは明らかなエラーでした。


ただし、別のエラーが発生したとします。

java.lang.NullPointerException

私はlogcatをチェックし、それが私に与えた青いリンクをクリックしました、そしてそれは私をここに連れて行きました:

mTextView.setText(myString);

だから、今デバッグしたい。このStackOverflowの質問によると、NullPointerExceptionは何かが存在することを示していnullます。

それでは、nullが何であるかを調べてみましょう。2つの可能性があります。mTextViewnullまたはnullのいずれかですmyString。見つけるために、mTextView.setText(mString)行の前に、次の2行を追加します。

Log.d("AppDebug","mTextView is null: " + String.valueOf(mTextView == null);
Log.d("AppDebug","myString is null: " + String.valueOf(myString== null);

ここで、以前に行ったように(VeroseをErrorに変更)、 "Error"を "Debug"に変更します。デバッグでログを記録しているので。すべてのLogメソッドは次のとおりです。

Log.
  d means Debug
  e means error
  w means warning
  v means verbose
  i means information
  wtf means "What a terrible failure". This is similar to Log.e

したがって、を使用したためLog.d、Debugをチェックインしています。そのため、デバッグに変更しました。

通知Log.dには最初のパラメーターがあり、この場合は「AppDebug」です。logcatの右上にある[フィルターなし]ドロップダウンメニューをクリックします。「フィルター構成の編集」を選択し、フィルターに名前を付け、「ログタグ」に「アプリのデバッグ」を入力します。「OK」をクリックします。これで、logcatに2行が表示されます。

yourPackageNameAndApp: mTextView is null: true
yourPackageNameAndApp: myString is null: false

これで、mTextViewがnullであることがわかりました。

コードを観察すると、何かに気づきました。

私はprivate TextView mTextViewクラスのトップで宣言しました。しかし、私はそれを定義していません。

基本的に私は私のonCreate()でこれを行うのを忘れていました:

mTextView = (TextView) findViewById(R.id.textview_id_in_xml);

だからmTextView私はそれが何であるかを自分のアプリに伝えるのを忘れたので、nullがnullです そのため、その行を追加してアプリを実行すると、アプリがクラッシュしなくなりました。



1
これは良い情報ですが、スタックトレースの画像を使用すると、その有用性が損なわれます。画像を検索したり、コピーして貼り付けたり、スクリーンリーダーで画像を取得したり、読みにくくすることができます。(ちなみに、私は反対票を投じなかったので、指摘するだけです)。
EJoshuaS-モニカを

1
@EJoshuaS私は画像を提供することを言わなかった。
アブ

19

このポップアップは、コードで致命的な例外が発生し、アプリの実行が停止した場合にのみ表示されます。これは、任意の例外可能性がありNullPointerExceptionOutOfMemoryExceptionなど

チェックする最良の方法は、Androidスタジオでアプリを開発している場合はLogcatを使用することです。これは、スタックトレースを読み取ってアプリの原因をすばやく確認する方法です。

アプリがすでに稼働している場合は、logcatを使用できません。そのためCrashlytics、発生した例外のバグレポートを提供するために実装できます。


17

ご確認Logcatのメッセージを、あなたの参照Manifestファイルを。Activity,ユーザー権限の定義など、不足しているものがあるはずです。


14

次のいずれかのツールを使用できます。

  1. adb logcat

  2. adb logcat> logs.txt(エディターを使用してエラーを開き、検索できます。)

  3. eclipse logcat(eclipseに表示されない場合は、Windows-> Show View-> Others-> Android-> LogCatに移動します)

  4. AndroidデバッグモニターまたはAndroidデバイスモニター(コマンドモニターを入力するか、UIから開く)

ここに画像の説明を入力してください

  1. Android Studio

Android Debug Monitorを使用することをお勧めします。ログが多すぎるとeclipseがハングし、adb logcatフィルターを介してすべてが困難になるためです。


12

あなたはチェックする必要があります Stack trace

どうやってするか?

IDEでLOGCATフォームのウィンドウを確認します

logcatウィンドウが表示されない場合は、このパスに移動して開きます

window->show view->others->Android->Logcat

Google-Apiを使用している場合は、このパスに移動します

adb logcat> logcat.txt


10

以下のshowToast()メソッドでは、試すために、コンテキストまたはアプリケーションコンテキストの別のパラメーターを渡す必要があります。

  public void showToast(String error, Context applicationContext){
        LayoutInflater inflater = getLayoutInflater();
        View view = inflater.inflate(R.layout.custom_toast, (ViewGroup)      
        findViewById(R.id.toast_root));
        TextView text = (TextView) findViewById(R.id.toast_error);
        text.setText(error);
        Toast toast = new Toast(applicationContext);
        toast.setGravity(Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0);
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setView(view);
        toast.show();
}

9

強制終了したとき(アプリが機能しなくなったとき)の基本的なLogcat分析を共有しましょう。

ドキュメント

ログを収集/分析するためのAndroidの基本的なツールはlogcatです。

こちらはAndroidのlogcatに関するページです

Android Studioを使用している場合は、このLINKも確認できます。

捕獲

基本的に、次のコマンドでlogcatを手動でキャプチャできます(またはAndroidStudioのAndroidMonitorウィンドウを確認するだけです)。

adb logcat

コマンドに追加できるパラメーターはたくさんあり、必要なメッセージをフィルターして表示するのに役立ちます...これは個人的なものです...私は常にメッセージのタイムスタンプを取得するために以下のコマンドを使用します。

adb logcat -v time

出力をファイルにリダイレクトし、テキストエディタで分析できます。

分析する

アプリがクラッシュしている場合は、次のようになります。

07-09 08:29:13.474 21144-21144/com.example.khan.abc D/AndroidRuntime: Shutting down VM
07-09 08:29:13.475 21144-21144/com.example.khan.abc E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.khan.abc, PID: 21144
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
     at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
     at android.view.View.performClick(View.java:4848)
     at android.view.View$PerformClick.run(View.java:20262)
     at android.os.Handler.handleCallback(Handler.java:815)
     at android.os.Handler.dispatchMessage(Handler.java:104)
     at android.os.Looper.loop(Looper.java:194)
     at android.app.ActivityThread.main(ActivityThread.java:5631)
     at java.lang.reflect.Method.invoke(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:372)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
07-09 08:29:15.195 21144-21144/com.example.khan.abc I/Process: Sending signal. PID: 21144 SIG: 9

ログのこの部分には、多くの情報が表示されます。

  • 問題が発生したとき: 07-09 08:29:13.475

問題がいつ発生したかを確認することが重要です...ログにいくつかのエラーが見つかることがあります...適切なメッセージを確認していることを確認する必要があります:)

  • クラッシュしたアプリ: com.example.khan.abc

このようにして、クラッシュしたアプリを確認できます(メッセージに関するログを確認していることを確認するため)。

  • どのエラー: java.lang.NullPointerException

NULLポインター例外エラー

  • エラーに関する詳細情報: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference

オブジェクトonBackPressed()からメソッドを呼び出そうとしましたFragmentActivity。しかし、そのオブジェクトはnullあなたがそれをしたときのものでした。

  • スタックトレース:スタックトレースは、メソッドの呼び出し順序を示します...時々、エラーは呼び出し元のメソッドで(呼び出されたメソッドではなく)発生します。

    com.example.khan.abc.AudioFragment $ 1.onClick(AudioFragment.java:125)で

行内のメソッドcom.example.khan.abc.AudioFragment.java内のファイルでエラーが発生しました:(スタックトレースはエラーが発生した行を示します)onClick()125

それは以下によって呼び出されました:

at android.view.View.performClick(View.java:4848)

これは以下によって呼び出されました:

at android.view.View$PerformClick.run(View.java:20262)

これは以下によって呼び出されました:

at android.os.Handler.handleCallback(Handler.java:815)

等....

概観

これは単なる概要でした...すべてのログが単純であるわけではありません...アイデアを共有し、エントリレベルの情報を提供するだけです...

なんとかお役に立てれば幸いです...よろしく


8

LogCatを使用して、アプリがクラッシュする原因を見つけてください。

Android Studioを使用している場合にLogcatを表示するには、ALT + 6 または

Eclipseを使用している場合は、 ウィンドウ->パースペクティブを開く->その他-LogCat

LogCatに移動し、ドロップダウンメニューからエラーを選択します。これには、デバッグに役立つすべての必要な情報が含まれます。それでも解決しない場合は、質問の編集としてLogCatを投稿してください。誰かが手伝ってくれます。


7

何らかの理由でアプリがスタックトレースなしでクラッシュした場合。最初の行からデバッグしてみて、クラッシュするまで行ごとに行ってください。それからあなたは答えがあります、どの行があなたをトラブルの原因にしています。おそらく、それをtry catchブロックにラップして、エラー出力を出力できます。


5

スタックトレースやその他のエラーメッセージなしで、このエラーメッセージを単独で取得することもできます。

この場合、Androidマニフェストが正しく構成されていることを確認し(ライブラリから発生するマニフェストのマージとライブラリからのアクティビティを含む)、マニフェストファイルのアプリケーションに表示される最初のアクティビティに特に注意する必要があります。


3
この現象を実証するプロジェクトをアップロードしていただけませんか。
CommonsWare、2015

5

開発中のクラッシュ

私のお気に入りのツールであるlogviewを試して、ログを取得し、開発中にそれらを分析してください。Linuxで実行するときは、実行可能として
マーク./logview./lib/logview.jarてください。

気に入らない場合は、Android向けの代替デスクトップログビューアが多数あります。

野生のクラッシュ

ユーザーのデバイスで発生した未処理の例外のスタックトレースを取得するために、Firebase Crashlyticsなどのリアルタイムのクラッシュレポートツールを統合します。

バグのあるアプリをリリースする方法(およびライブで物語を伝える方法)を読んで、フィールドでのバグの処理の詳細を確認してください。


4

人々は間違いを犯すので、コーディングも同様です。

何かerror起こったときは、常に赤い色のテキストでlogcatをチェックしてください。ただし、赤い色のテキストに下線が付いている青い色のテキストで実際の問題を見つけることができます。

新しいを作成する場合はactivity、必ずファイルでを宣言activityしてくださいAndroidManifest

権限を追加する場合は、AndroidMainifestファイルでも宣言します。


4

Logcat - Android Studioの開発フェーズでログを確認するには

最初にLogcatをクリアし、アプリを再度クラッシュさせて、クラッシュしたログの詳細のみを取得できるようにします。スタックトレースを確認する必要があります

残念ながら、MyAppは停止しました。それには多くの理由があります。同じことをログで確認できます。これには、Log.e( "TAG"、 "Message");を使用できます。

アプリのクラッシュ時の一般的なエラー:

  1. コーディングミス(キーワードの誤用)。
  2. プロパティ名が一致しません。
  3. サポートされていないプラグイン(たぶん)。
  4. バージョンが一致していない可能性があります。
  5. AndroidManifestファイルにアクティビティがありません。
  6. AndroidManifestファイルに権限がありません。
  7. 最も一般的なNullPointerException。
  8. 宣言されていますが、定義されていません。

アプリのクラッシュエラーを解決するには:

  • 上記の点に留意し、それを実行してください。
  • エラーが発生すると、ファイル名も青色で表示されます(ファイル名をクリックして、エラーが発生しているコードにジャンプします)。

3

まず、あなたのアプリがクラッシュしてきた理由はどこで確認する必要がある(Unfortunately, MyApp has stopped.).の助けを借りてLOG、あなたは何が悪かったのか、それを把握することができます。

その後、アプリが停止したポイントを見つけ、そのポイントから修正します。


3

ターミナルに興味深いログがない場合(または、ログがアプリに直接関連していない場合)は、ネイティブライブラリが原因である可能性があります。その場合は、ターミナル内の「tombstone」ファイルを確認する必要があります。

トゥームストーンファイルのデフォルトの場所はすべてのデバイスによって異なりますが、その場合は、次のようなログが記録されます。 Tombstone written to: /data/tombstones/tombstone_06

詳細については、https://source.android.com/devices/tech/debugを確認してください


0

また、ターミナルでこのコマンドを実行すると、問題を見つけるのに役立ちます。

gradlew build > log.txt 2>details.txt

次に、上記の2つのログファイルを読んでgradlewファイルの場所に移動する必要があります。

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