バグレポートには、アプリのバグを見つけて修正するのに役立つデバイスログ、スタック トレース、その他の診断情報が含まれています。バグレポートをデバイスからキャプチャするには、デバイスの [バグレポート取得] 開発者向けオプション、Android Emulator メニュー、または開発マシンの adb bugreport コマンドを使用します。
図 1. デバイスの開発者向けオプション
バグレポートを取得するには、デバイスで開発者向けオプションを有効にして、[バグレポート取得] オプションにアクセスする必要があります。
デバイスからバグレポートをキャプチャする
図 2. バグレポートの準備が完了
デバイスからバグレポートを直接取得する手順は次のとおりです。
- 開発者向けオプションを有効にします。
- [開発者向けオプション] で [バグレポート取得] をタップします。
- 希望するバグレポートのタイプを選択し、[レポート] をタップします。
しばらくすると、図 2 に示すように、バグレポートの準備が完了したという通知が届きます。
- バグレポートを共有するには、通知をタップします。
Android Emulator からバグレポートをキャプチャする
[File a bug] 機能は、Android Emulator の拡張コントロールから使用できます。
- エミュレータ パネルでその他アイコン
をクリックします。 [Extended controls] ウィンドウで [Bug report] を選択します。
これにより、バグレポートの詳細(スクリーンショット、AVD 構成情報、バグレポート ログなど)を確認できる画面が開きます。再現する手順などのメッセージを入力して、レポートとともに保存することもできます。
バグレポートの収集が完了するまで待ってから、[Save Report] をクリックします。
adb を使用してバグレポートをキャプチャする
接続しているデバイスが 1 つだけの場合、次のように adb を使用してバグレポートを取得できます。
$ adb bugreport E:\Reports\MyBugReports
バグレポートのパスを指定しなかった場合は、ローカル ディレクトリに保存されます。
複数のデバイスを接続している場合は、-s オプションでデバイスを指定する必要があります。デバイスのシリアル番号を取得してバグレポートを生成するには、次の adb コマンドを実行します。
$ adb devices List of devices attached emulator-5554 device 8XV7N15C31003476 device $ adb -s 8XV7N15C31003476 bugreport
古いバグレポートを保存する
デフォルトでは、バグレポートは /bugreports に保存され、次のコマンドで表示できます。
$ adb shell ls /bugreports/ bugreport-foo-bar.xxx.YYYY-MM-DD-HH-MM-SS-dumpstate_log-yyy.txt bugreport-foo-bar.xxx.YYYY-MM-DD-HH-MM-SS.zip dumpstate-stats.txt
次のように、adb pull で zip ファイルを取得できます。
$ adb pull /bugreports/bugreport-foo-bar.xxx.YYYY-MM-DD-HH-MM-SS.zip
バグレポートの zip ファイルを調べる
デフォルトでは、zip ファイルの名前は bugreport-BUILD_ID-DATE.zip です。zip ファイルには複数のファイルが含まれる場合がありますが、最も重要なファイルは bugreport-BUILD_ID-DATE.txt です。このファイルがバグレポートであり、システム サービスの診断出力(dumpsys)、エラーログ(dumpstate)、システム メッセージログ(logcat)が含まれます。システム メッセージには、デバイスがエラーをスローしたときのスタック トレースと、Log クラスを持つすべてのアプリから書き込まれたメッセージが含まれます。
zip ファイルには、Android リリースレターが格納された version.txt メタデータ ファイルが含まれます。systrace が有効になっている場合、zip ファイルには systrace.txt ファイルも含まれます。Systrace ツールを使用すると、アプリプロセスと他の Android システム プロセスの実行時間がキャプチャされて表示されるため、アプリのパフォーマンスを分析できます。
dumpstate ツールにより、デバイスのファイル システムのファイルが FS フォルダ内の zip ファイルとしてコピーされ、参照できるようになります。たとえば、デバイスの /dirA/dirB/fileC ファイルは、zip ファイル内の FS/dirA/dirB/fileC エントリになります。
図 3. バグレポート ファイルの構造
詳細については、バグレポートを読むをご覧ください。
ユーザーからレポートを取得する
バグレポートのキャプチャは、アプリを自分で使用しているときには便利ですが、エンドユーザーからこのようなバグレポートを共有してもらうのは簡単なことではありません。スタック トレースを含むクラッシュ レポートを実際のユーザーから取得するには、Google Play と Firebase Crash Reporting の機能を利用します。
Google Play Console
Google Play Console からレポートを取得して、Google Play からアプリをインストールしたユーザーのクラッシュと ANR(アプリケーション応答なし)エラーのデータを確認できます。過去 6 か月のデータを確認できます。
詳細については、Play Console ヘルプのクラッシュと ANR(アプリケーション応答なし)エラーを確認するをご覧ください。
Firebase Crash Reporting
Firebase Crashlytics Reporting では、アプリ内のエラーの詳細なレポートが作成されます。エラーは、スタック トレースの類似性に基づいて問題別にグループ化され、ユーザーに与える影響の深刻度に応じて分類されます。自動レポートを受け取るだけでなく、カスタム イベントをログに記録して、クラッシュにつながる段階で捕捉することもできます。
任意のユーザーからのクラッシュ レポートの受信を開始するには、build.gradle ファイルに Firebase の依存関係を追加します。詳細については、Firebase Crashlytics をご覧ください。