私はアプリケーションを開発しています、そしてそれを実行するたびに、私はメッセージを受け取ります:
残念ながら、MyAppは停止しました。
これを解決するために何ができますか?
この質問について - 明らかに からヒントを得たものです。スタックトレースとは何ですか?またそれを使用してアプリケーションエラーをデバッグすることができますか? 。それ以上の詳細はありませんが、それらのアプリケーションはクラッシュしました。この質問は、初心者のAndroidプログラマーに、自分自身で問題を解決する方法や正しい質問をする方法を教えることを目的としています。
この回答は、スタックトレースを取得するプロセスを説明しています。スタックトレースはもうありますか?スタックトレースの詳細については、「 スタックトレースとは何ですか。また、アプリケーションエラーのデバッグにどのように使用できますか? 」を参照してください。
見つからなかったRuntimeException
がスローされたため、アプリケーションは終了しました。
これらの最も一般的なものは NullPointerException
です。
Androidアプリケーションがクラッシュするたびに(またはそのことに関してはJavaアプリケーションでも)、Stack trace
がコンソール(この場合はlogcat)に書き込まれます。このスタックトレースには、あなたの問題を解決するための重要な情報が含まれています。
ウィンドウの一番下のバーにあるLogcat
ボタンをクリックしてください。または、を押すこともできます alt+6。エミュレータまたはデバイスがDevices
パネルで選択されていることを確認してください。次に、赤で表示されているスタックトレースを見つけます。 logcatにログインしているものがたくさんあるかもしれないので、少しスクロールする必要があるかもしれません。スタックトレースを見つける簡単な方法は、(右側のごみ箱を使って)logcatをクリアして、アプリを再びクラッシュさせることです。
わーい!あなたはあなたの問題を解決するための途中です。
スタックトレースを分析して、アプリケーションがクラッシュした原因を正確に突き止めるだけで済みます。
スタックトレースの詳細については、「 スタックトレースとは何ですか。また、アプリケーションエラーのデバッグにどのように使用できますか? 」を参照してください。
Exception
とそれが発生した行が見つかったが、それでも修正方法がわからない場合は、StackOverflowで躊躇しないでください。
できるだけ簡潔にするようにしてください。スタックトレースと関連するコード(例:Exception
を投げた行までの数行)を投稿してください。
Logcat file
を取得して問題を分析するには、 GoogleのADBツール を使用できます。
adb logcat > logcat.txt
logcat.txt
ファイルを開き、アプリケーション名を検索してください。失敗した理由、行番号、クラス名などに関する情報があるはずです。
最初に、アプリがどの時点でクラッシュしたかを確認します(Unfortunately, MyApp has stopped.
)。これには、Log.e("TAG", "Message");
を使用できます。この行を使用すると、アプリケーションがlogcatにログインするのを確認できます。
その後、アプリがどの時点で停止したかを判断するのは非常に簡単です。
Log catでエラーをチェックするだけです。
Log catオプションはEclipseから入手できます。
ウィンドウ - >ビューを表示 - >その他 - > Android-> Logcat
ログキャットにエラーがあります。
そうでなければ、デバッグモードでアプリケーションを実行してエラーをチェックすることもできます。まず、その後にブレークポイントを設定します。
project-> debug as-> Androidアプリケーションを右クリックします。
注:この回答はAndroid Studio 2.2.2を使用しています
注2:お使いのデバイスは正常に接続されていると考えています。
アプリケーションがクラッシュしたときに最初にすることは、LogCatを調べることです。AndroidStudioの下部には、メニューのリストを含むツールバーがあります。
「Androidモニター」をクリックします(上の画像で下線を引いたもの)。
今、あなたはこのような何かを得るでしょう:
"Verbose
"を "Error
"に変更してください。ログに記録されたエラーのみが表示されます。 (あなたがそれらを持っているならば)今これらのすべてのエラーについて心配しないでください。
OK。今、あなたのアプリをクラッシュさせるためにあなたがしたことをしなさい。アプリがクラッシュしたら、logcatにアクセスしてください。例えばat:x.x.x
:とCaused by: TrumpIsPresidentException
がたくさんある新しいクラッシュログを見つけるべきです。あなたのlogcatのそのCaused by:
ステートメントに行ってください。
そのCaused By:
のの隣に、起こった例外があるはずです。私の場合、それはRuntimeException
との下にblueリンクのような行があるはずです。 :
その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であるのですか。なぜなら、私は自分のアプリにそれが何であるかを伝えるのを忘れたからです。だから私はその行を追加し、私のアプリを実行し、そして今アプリはクラッシュしません。
このポップアップは、コードの中で致命的な例外が発生してアプリケーションの実行が停止した場合にのみ表示されます。それはどんな例外NullPointerException
、OutOfMemoryException
などにもなり得ます。
あなたがまだアンドロイドスタジオでアプリを開発しているなら、スタックトレースを読んで、アプリの原因をチェックするための最善の方法は、Logcatです。 。
あなたのアプリが既に公開されている場合は、logcatは使用できません。ですから、そのためにCrashlytics
を実装して、発生したあらゆる例外のバグレポートを提供することができます。
Logcat
メッセージを確認して、Manifest
ファイルを参照してください。 Activity,
Userパーミッション `などを定義するなど、足りないものがあるはずです。
これらのツールはどれでも使用できます。
adb logcat
adb logcat> logs.txt(エディタを使用してエラーを開いて検索できます)。
Eclipse logcat(Eclipseに表示されていない場合は、ウィンドウ - >ビューの表示 - >その他 - > Android - > LogCatに進みます)
- AndroidデバッグモニターまたはAndroidデバイスモニター(type commandmonitorまたはUIから開く)
- アンドロイドスタジオ
私はAndroid Debug Monitorを使うことを勧めます、それは良いです。あまりにも多くのログがあると、そしてadb logcatフィルターなどを介してEclipseがハングするため、すべてが困難です。
あなたはStack trace
をチェックしなければなりません
その方法は?
あなたのIDE LOGCATからWindowsフォームをチェックしてください
Logcatウィンドウが見れない場合は、このパスに移動して開きます。
window->show view->others->Android->Logcat
google-Apiを使用している場合は、このパスにアクセスしてください。
adb logcat> logcat.txt
下記の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();
}
強制終了に達したとき(アプリが動作を停止したとき)の基本的な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)
等....
概要
これは概要にすぎません...すべてのログが単純ではないなど...アイデアを共有してエントリレベルの情報を提供することだけを目的としています...
私はあなたがいつかあなたを助けることができると思います...よろしく
LogCatを使用して、アプリがクラッシュする原因を特定します。
Logcatを見るにはAndroid Studioを押してからALT + 6を押すか
Eclipseを使用する場合ウィンドウ - > Open Perspective - >その他 - LogCat
LogCatに移動し、ドロップダウンメニューからエラーを選択します。これには、デバッグに役立つすべての必要な情報が含まれています。それでも解決しない場合は、質問の編集としてLogCatを投稿してください。
何らかの理由であなたのアプリが良いスタックトレースなしでクラッシュした場合。最初の行からデバッグし、クラッシュするまで1行ずつ実行してください。それであなたは答えを持つでしょう、どの線があなたを悩ませています。おそらくそれをtry catchブロックに組み込んでエラー出力を印刷することができます。
私のお気に入りのツール logview を使ってログを取得し、開発中にそれらを分析してください。
Linuxで実行するときは、必ず./logview
と./lib/logview.jar
を実行可能としてマークしてください。
気に入らない場合は、Android用の デスクトップログビューアがたくさんあります 。
ユーザーのデバイスで発生した未処理の例外のスタックトレースを取得するために、 Firebase Crashlytics などのリアルタイムクラッシュ報告ツールを統合します。
バギーアプリをリリースする方法(および物語を語るためのライブ) を読んで、フィールド内のバグの処理に関する詳細を確認してください。
スタックトレースやその他のエラーメッセージを表示せずに、このエラーメッセージを独自に取得することもできます。
この場合、Androidのマニフェストが正しく設定されていること(ライブラリから発生するマニフェストのマージやライブラリから発生するアクティビティを含む)を確認し、マニフェストファイルのアプリケーションに表示される最初のアクティビティに特に注意を払う必要があります。 。
人はミスを犯し、それでコーディングもします。
error
が発生した場合は、常に赤色のテキストでlogcatを確認してください。ただし、青色のテキストに実際の問題がある場合は、赤色のテキストに下線を付けてください。
新しいactivity
を作成する場合は、必ずactivity
ファイルでAndroidManifest
を宣言してください。
権限を追加する場合は、それをAndroidMainifest
ファイルにも宣言します。
Logcat - Android Studioの開発段階でログを確認する
最初にLogcatをクリアしてアプリを再度クラッシュさせると、クラッシュしたログの詳細しか表示されません。あなたはスタックトレースをチェックしなければなりません
一方、残念ながら、MyAppは停止しました。それには多くの理由があります。ログでも確認できます。これには、Log.e( "TAG"、 "Message")を使用できます。
以下のようなアプリクラッシュ中の一般的なエラー:
アプリのクラッシュエラーを解決するには、
最初に、アプリがクラッシュした場所と理由を確認する必要があります(Unfortunately, MyApp has stopped.).
LOG
name__の助けを借りて、何がうまくいかなかったかを把握できます。
その後、アプリが停止したポイントを見つけて、それを修正します。
あなたがあなたの端末に興味を引くような種類のログインを持っていない場合(あるいはそれらはあなたのアプリに直接関連していない場合)、おそらくあなたの問題はネイティブライブラリが原因です。その場合、あなたはあなたの端末の中で「廃棄」ファイルをチェックするべきです。
トゥームストーンファイルのデフォルトの場所はすべてのデバイスによって異なりますが、その場合はログが表示されます。Tombstone written to: /data/tombstones/tombstone_06
詳細については、 https://source.Android.com/devices/tech/debug を確認してください。