Android アプリが期待どおりに動作しない場合、問題の原因を突き止めるにはどうすればよいですか? 特に Android アプリのデバッグに使用できるツールは何ですか?
(この Q&A を書いているのは、Android ドキュメントの複数のページからすべての情報を 1 か所に集めるためです。)
logcat
logcat
は、Android アプリのデバッグに最も役立つツールの 1 つです。一般的に、バグのあるアプリは「残念ながら、停止しました」というメッセージで終了します。原因を調べるには、logcat
ツールでスタック トレースを取得できます。
logcat
は、一般的なデバッグにも役立つツールです。Android にはコンソールがないため、通常のSystem.out.println()
呼び出しは、トレース情報と変数の値を出力するのにあまり役に立ちません。代わりに、 android.util.Logクラスを使用できます( Android ドキュメントのログの読み取りと書き込みも参照してください)。このクラスは、ログ メッセージを ERROR、WARN、INFO、DEBUG、VERBOSE の 5 つの重大度レベルで出力する関数を提供します。重大度の各レベルには対応するメソッドがあるため、これらの定数を明示的に使用することはほとんどありません。
デバッグの目的で、通常はLog.d()
which を 2 つの形式で使用します:Log.d(String, String)
と Log.d(String, String, Throwable)
. 最初のString
パラメーターは「タグ」で、何でもかまいません。多くの場合、これはメッセージを記録しているクラスの名前にすぎません。このタグを使用すると、ロギング メッセージを でフィルタリングlogcat
できるため、関心のあるメッセージをすばやく簡単に見つけることができます。2 番目String
は、実際のログ メッセージです。これは、単純な実行トレース、変数の値、またはデバッグ目的に役立つその他の出力である可能性があります。最後のパラメーターはオプションThrowable
であり、たとえば、throw...catch
ステートメントで例外をログに記録するために使用できます。
アプリでメッセージをログに記録したら、 を使用logcat
してそれらを表示できます。これを行う方法の正確な詳細は、コマンドライン ツールを使用して開発しているか、Eclipse および Android 開発プラグインを使用して開発しているかによって異なります。
最も単純な形式は実行することです
adb logcat
これは、アプリが例外をスローしたときにのみスタック トレースを確認する必要がある場合に役立ちます。特定のデバッグ メッセージを除外したい場合は、使用したタグ文字列とログ レベルによってこれを行うことができます。構文は次のとおりです。
adb logcat <tag>:<debugging level> ...
たとえば、 を呼び出すときに「HelloAndroid」タグを使用した場合、次のようLog.d()
に入力できます。
adb logcat HelloAndroid:D *:S
(*:S
最後の は、他のすべてのタグの出力を無音にします。)
デバッグはどのプログラマーにとっても重要なスキルであり、おそらくコードの書き方を学ぶことよりも重要です。上記のヒントが、Android 開発に飛び込むすべての人の学習曲線を短縮するのに役立つことを願っています。うまくいけば、あなたは私よりも早くスピードを上げてくれるでしょう。