web-dev-qa-db-ja.com

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

私はアプリケーションを開発しています、そしてそれを実行するたびに、私はメッセージを受け取ります:

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

これを解決するために何ができますか?


この質問について - 明らかに からヒントを得たものです。スタックトレースとは何ですか?またそれを使用してアプリケーションエラーをデバッグすることができますか? 。それ以上の詳細はありませんが、それらのアプリケーションはクラッシュしました。この質問は、初心者のAndroidプログラマーに、自分自身で問題を解決する方法や正しい質問をする方法を教えることを目的としています。

733
nhaarman

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

問題

見つからなかったRuntimeExceptionがスローされたため、アプリケーションは終了しました。
これらの最も一般的なものは NullPointerException です。

解決するには?

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

アンドロイドスタジオ

Finding the stack trace in Android Studio

ウィンドウの一番下のバーにあるLogcatボタンをクリックしてください。または、を押すこともできます alt+6。エミュレータまたはデバイスがDevicesパネルで選択されていることを確認してください。次に、赤で表示されているスタックトレースを見つけます。 logcatにログインしているものがたくさんあるかもしれないので、少しスクロールする必要があるかもしれません。スタックトレースを見つける簡単な方法は、(右側のごみ箱を使って)logcatをクリアして、アプリを再びクラッシュさせることです。

私はスタックトレースを見つけました、今何?

わーい!あなたはあなたの問題を解決するための途中です。
スタックトレースを分析して、アプリケーションがクラッシュした原因を正確に突き止めるだけで済みます。

スタックトレースの詳細については、「 スタックトレースとは何ですか。また、アプリケーションエラーのデバッグにどのように使用できますか? 」を参照してください。

私はまだ私の問題を解決することはできません!

Exceptionとそれが発生した行が見つかったが、それでも修正方法がわからない場合は、StackOverflowで躊躇しないでください。

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

678
nhaarman

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

adb logcat > logcat.txt

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

103
Vlad Bezden

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

その後、アプリがどの時点で停止したかを判断するのは非常に簡単です。

35
Hiren Vaghela

Log catでエラーをチェックするだけです。

Log catオプションはEclipseから入手できます。

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

ログキャットにエラーがあります。

そうでなければ、デバッグモードでアプリケーションを実行してエラーをチェックすることもできます。まず、その後にブレークポイントを設定します。

project-> debug as-> Androidアプリケーションを右クリックします。

26
Rahil Ali

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

注2:お使いのデバイスは正常に接続されていると考えています。


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

image 

「Androidモニター」をクリックします(上の画像で下線を引いたもの)。

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

image 

"Verbose"を "Error"に変更してください。ログに記録されたエラーのみが表示されます。 (あなたがそれらを持っているならば)今これらのすべてのエラーについて心配しないでください。

image 

OK。今、あなたのアプリをクラッシュさせるためにあなたがしたことをしなさい。アプリがクラッシュしたら、logcatにアクセスしてください。例えばat:x.x.x:とCaused by: TrumpIsPresidentExceptionがたくさんある新しいクラッシュログを見つけるべきです。あなたのlogcatのそのCaused by:ステートメントに行ってください。

image 

そのCaused By:の隣に、起こった例外があるはずです。私の場合、それはRuntimeExceptionの下にblueリンクのような行があるはずです。 :

image 

そのCaused by:DOESN'Tにその下のどこかに青いテキストの付いた行がない場合は、それがある別のCaused by:を探します。

その青いリンクをクリックしてください。問題が発生した場所に連れて行く必要があります。私の場合は、この行が原因でした。

throw new RuntimeException();

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


しかし、別のエラーが出たとしましょう。

Java.lang.NullPointerException

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

mTextView.setText(myString);

だから、今私はデバッグしたいです。 このStackOverflowの質問によると 、NullPointerExceptionは何かがnullであると言う。

それでは、nullとは何かを見つけましょう。 2つの可能性があります。 mTextViewがNULL、またはmyStringがNULLです。調べるために、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を使ったので、デバッグをチェックインしています。それがデバッグに変更した理由です。

Log.dには最初のパラメータがあります。この例では "AppDebug"です。 logcatの右上にある「フィルタなし」ドロップダウンメニューをクリックしてください。 「Edit Filter Configuration」を選択し、あなたのフィルタに名前を付け、そして「Log Tag」に「App Debug」を置きます。 「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であるのですか。なぜなら、私は自分のアプリにそれが何であるかを伝えるのを忘れたからです。だから私はその行を追加し、私のアプリを実行し、そして今アプリはクラッシュしません。


24
Ab_

このポップアップは、コードの中で致命的な例外が発生してアプリケーションの実行が停止した場合にのみ表示されます。それはどんな例外NullPointerExceptionOutOfMemoryExceptionなどにもなり得ます。

あなたがまだアンドロイドスタジオでアプリを開発しているなら、スタックトレースを読んで、アプリの原因をチェックするための最善の方法は、Logcatです。 。

あなたのアプリが既に公開されている場合は、logcatは使用できません。ですから、そのためにCrashlyticsを実装して、発生したあらゆる例外のバグレポートを提供することができます。

18
Ani

Logcatメッセージを確認して、Manifestファイルを参照してください。 Activity,Userパーミッション `などを定義するなど、足りないものがあるはずです。

16
Manoj ahirwar

これらのツールはどれでも使用できます。

  1. adb logcat

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

  3. Eclipse logcat(Eclipseに表示されていない場合は、ウィンドウ - >ビューの表示 - >その他 - > Android - > LogCatに進みます)

  4. AndroidデバッグモニターまたはAndroidデバイスモニター(type commandmonitorまたはUIから開く)

enter image description here

  1. アンドロイドスタジオ

私はAndroid Debug Monitorを使うことを勧めます、それは良いです。あまりにも多くのログがあると、そしてadb logcatフィルターなどを介してEclipseがハングするため、すべてが困難です。

13
ShivBuyya

あなたはStack traceをチェックしなければなりません

その方法は?

あなたのIDE LOGCATからWindowsフォームをチェックしてください

Logcatウィンドウが見れない場合は、このパスに移動して開きます。

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

google-Apiを使用している場合は、このパスにアクセスしてください。

adb logcat> logcat.txt

11
alireza amini

下記の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();
}
10
Mayank Nema

強制終了に達したとき(アプリが動作を停止したとき)の基本的なLogcat分析を共有しましょう。

DOCS

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

HERE はlogcatに関するAndroidのページです

Android Studioを使用している場合は、これをチェックすることもできます LINK

キャプチャ中

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

adb logcat

あなたが欲しいメッセージをフィルタして表示するのを助けるあなたがcommandに追加できるたくさんのパラメータがあります...これは個人的です...私は常にメッセージのタイムスタンプを得るために以下のコマンドを使います:

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

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

  • Stack Trace:Stack Traceは、メソッドの呼び出し順序を示しています...時々、エラーは呼び出し側のメソッドで発生します(呼び出されたメソッドでは発生しません)。

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

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

それは呼ばれました:

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)

等....

概要

これは概要にすぎません...すべてのログが単純ではないなど...アイデアを共有してエントリレベルの情報を提供することだけを目的としています...

私はあなたがいつかあなたを助けることができると思います...よろしく

9
W0rmH0le

LogCatを使用して、アプリがクラッシュする原因を特定します。

Logcatを見るにはAndroid Studioを押してからALT + 6を押すか

Eclipseを使用する場合ウィンドウ - > Open Perspective - >その他 - LogCat

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

8

何らかの理由であなたのアプリが良いスタックトレースなしでクラッシュした場合。最初の行からデバッグし、クラッシュするまで1行ずつ実行してください。それであなたは答えを持つでしょう、どの線があなたを悩ませています。おそらくそれをtry catchブロックに組み込んでエラー出力を印刷することができます。

7
felislynx.silae

開発中のクラッシュ

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

気に入らない場合は、Android用の デスクトップログビューアがたくさんあります

野生でクラッシュ

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

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

5
naXa

スタックトレースやその他のエラーメッセージを表示せずに、このエラーメッセージを独自に取得することもできます。

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

5
Pelpotronic

人はミスを犯し、それでコーディングもします。

errorが発生した場合は、常に赤色のテキストでlogcatを確認してください。ただし、青色のテキストに実際の問題がある場合は、赤色のテキストに下線を付けてください。

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

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

4
Kopi Bryant

Logcat - Android Studioの開発段階でログを確認する

最初にLogcatをクリアしてアプリを再度クラッシュさせると、クラッシュしたログの詳細しか表示されません。あなたはスタックトレースをチェックしなければなりません

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

以下のようなアプリクラッシュ中の一般的なエラー:

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

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

  • 上記の点を念頭に置いて、それを通過してください。
  • エラーが発生した場合は、ファイル名も青い色で表示されます(それらをクリックし、エラーが発生しているのでコードにジャンプしてください)。
4
Ashish

最初に、アプリがクラッシュした場所と理由を確認する必要があります(Unfortunately, MyApp has stopped.).LOGname__の助けを借りて、何がうまくいかなかったかを把握できます。

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

3
Mehul Solanki

あなたがあなたの端末に興味を引くような種類のログインを持っていない場合(あるいはそれらはあなたのアプリに直接関連していない場合)、おそらくあなたの問題はネイティブライブラリが原因です。その場合、あなたはあなたの端末の中で「廃棄」ファイルをチェックするべきです。

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

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

1
zapotec