バグレポートをキャプチャして読み取る

バグレポートには、アプリのバグを見つけて修正するのに役立つデバイスログ、スタック トレース、その他の診断情報が含まれています。バグレポートをデバイスからキャプチャするには、デバイスの [バグレポート取得] 開発者向けオプション、Android Emulator メニュー、または開発マシンの adb bugreport コマンドを使用します。

図 1. デバイスの開発者向けオプション

バグレポートを取得するには、デバイスで開発者向けオプションを有効にして、[バグレポート取得] オプションにアクセスする必要があります。

デバイスからバグレポートをキャプチャする

図 2. バグレポートの準備が完了

デバイスからバグレポートを直接取得する手順は次のとおりです。

  1. 開発者向けオプションを有効にします。
  2. [開発者向けオプション] で [バグレポート取得] をタップします。
  3. 希望するバグレポートのタイプを選択し、[レポート] をタップします。

    しばらくすると、図 2 に示すように、バグレポートの準備が完了したという通知が届きます。

  4. バグレポートを共有するには、通知をタップします。

Android Emulator からバグレポートをキャプチャする

[File a bug] 機能は、Android Emulator の拡張コントロールから使用できます。

  1. エミュレータ パネルでその他アイコン をクリックします。
  2. [Extended controls] ウィンドウで [Bug report] を選択します。

    これにより、バグレポートの詳細(スクリーンショット、AVD 構成情報、バグレポート ログなど)を確認できる画面が開きます。再現する手順などのメッセージを入力して、レポートとともに保存することもできます。

  3. バグレポートの収集が完了するまで待ってから、[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 をご覧ください。