ByteScope

Android Bugreport Analyzer

bugreport.zip をドロップするだけで、その端末が何をしていたかが見えます。画面・wakelock・充電などのトラック付き電池タイムライン、端末を起こし続けたアプリと wakelock、メインスレッドを先頭にした ANR 一覧、アプリのクラッシュと tombstone、検索できる生テキスト。処理はこのタブの中だけで、個人情報だらけのファイルはアップロードされません。

ファイルはブラウザから送信されません — 処理はすべてローカルで行われます。

bugreport.zip をここにドロップするか、クリックして選択

bugreport*.zip または古い形式の .txt。このタブ内で読み込み、アップロードはしません。

このツールでわからないこと

  • bugreport の形式は Android のバージョンや端末メーカーによって変わります。このツールが認識しないセクションは推測せず、そのままのテキストとして表示します。
  • 電池の履歴は、端末が内部バッファに保持している期間だけです。それより古いイベントはファイルに残っていません。
  • 推定電力量(mAh)は Android 自身の見積もりで、実測値ではありません。新しい Android では出力されない場合もあります。
  • wakeup reason の説明は一般的な名前だけを対象にしています。メーカー独自の名前は「不明」と表示します。
  • ネイティブクラッシュにはシンボルファイルがないため、関数名ではなくアドレスとモジュールを表示します。
  • bugreport には個人情報が多く含まれます(アカウント、Wi-Fi 名、位置情報、通知の内容など)。ブラウザ内で処理され、アップロードされませんが、ファイルを他人に渡す前によく考えてください。

ファイルはどこにも送信されません。ページから送られるのは匿名の利用イベントだけです。

このツールについて

bugreport は、Android が要求に応じて生成する診断ダンプです。全システムサービスの dumpsys 出力、「端末が何をしていたか」の履歴付き電池統計、直近の ANR トレースと tombstone、logcat バッファ、端末プロパティの写しが入っています。アプリが落ち続ける、一晩で電池が空になる、というときに Android のエンジニアが求めるのがこのファイルで、Battery Historian が読むのも同じものです。ただし Battery Historian は Docker で立てる Go のサーバーです。このページは同じ zip をブラウザの中で開きます。Web Worker でアーカイブを展開し、メインファイルをセクションに分け、電池履歴と wakelock の表を解析して、タブに整理します。

作り方

端末側では、まず開発者向けオプションを有効にします(デバイス情報 → ビルド番号を 7 回タップ)。次に「開発者向けオプション → バグレポート」でフルレポートを選び、通知が出るまで待ちます。数分かかり、その間は端末の動作が重くなります。ADB が使えるパソコンなら adb bugreport bugreport.zip で同じアーカイブを保存できます。古い端末や一部の adb bugreport は zip ではなく単一の .txt を出しますが、どちらも読み込めます。WebUSB で端末から直接レポートを取得する機能はまだありません。端末側で生成してからファイルをドロップしてください。

知らないサイトにアップロードしてはいけない理由

bugreport に入っているのは電池の数字だけではありません。アカウント名、Wi-Fi のネットワーク名、最後に取得した位置情報、直近の通知の本文、インストール済みパッケージ、logcat の一部まで含まれます。グラフ 1 枚のためにそれを誰かのサーバーへ送るのは割に合いません。このページではアーカイブをこのタブの Web Worker の中で展開・解析し、どこにも送信せず、タブを閉じれば消えます。ベンダーに渡したり issue tracker に貼ったりする必要があるなら、先に一度中身を読んで、何が含まれているか考えてからにしてください。

各タブで見えるもの

「概要」には端末情報(機種、メーカー、Android のバージョン、ビルドフィンガープリント、カーネル、稼働時間、レポートの取得日時)、取得時点の電池の状態、そして異常の要約が並びます。要約は ANR・アプリクラッシュ・ネイティブクラッシュの件数、電池を最も消費したアプリ、最も多い起床理由で、それぞれ該当タブへ飛べます。「電池タイムライン」は電池残量の推移と、履歴に実際に含まれる状態ごとのトラック(画面、充電、running、wake_lock、モバイル通信、Wi-Fi、GPS、前面のアプリ、doze)を描き、残量が最も急に落ちた 5 区間と、その間にどのトラックが有効だったかも示します。「消費ランキング」にはアプリ別の partial wakelock、kernel wakelock、回数順の起床理由、レポートに含まれていれば Android 自身が推定したアプリ別消費電力(mAh)があります。「クラッシュ」は ANR をプロセス・PID・理由付きで一覧し、展開すると全スレッドがメインスレッドを先頭に表示され、最初の非フレームワークフレームに印が付き、「waiting to lock … held by thread N」のようなロック待ちも示します。アプリのクラッシュは例外の種類・メッセージ・スタック、tombstone はシグナル・fault address・abort message・バックトレースです。「生セクション」はメインファイルの目次と仮想スクロールの本文で、全文検索と、logcat のレベル・タグ・PID での絞り込みができます。各表は CSV に書き出せ、概要・ランキング・クラッシュ一覧は JSON としてコピーできます。

正直に書く制限

bugreport の形式は Android のバージョンとメーカーによって変わります。ここでの解析は Android 12 で確認したもので、認識できないセクションは推測せず、そのままのテキストで表示します。電池履歴は固定サイズのリングバッファ(確認した端末では 4096 KB)に保存され、いっぱいになると古いイベントから捨てられるため、タイムラインに出るのは残っている範囲だけです。推定消費電力(mAh)は Android 自身の推定値で実測ではなく、新しいバージョンではセクション自体がないこともあります。起床理由の説明は一般的な名前だけで、メーカー独自の名前は「不明」と表示します。ネイティブクラッシュはシンボル化できないので、バックトレースに出るのはアドレスとモジュール名だけで、関数名には戻せません。

よくある質問

bugreport はどうやって作りますか?

端末側では、設定 → デバイス情報で「ビルド番号」を 7 回タップして開発者向けオプションを有効にし、「開発者向けオプション → バグレポート → フルレポート」を選びます。1〜2 分ほどで通知が出るので、zip を自分宛てに共有してください。パソコンからは adb bugreport bugreport.zip です。できた zip、または旧形式の単一 .txt をこのページにドロップしてください。

ANR トレースが見えないのはなぜですか?

ANR トレースは /data/anr にあり、最近のビルドでは shell ユーザーからこのディレクトリを読めません。ただし dumpstate 自身には権限があるので、フルの bugreport なら通常は zip の FS/data/anr/ に入り、このページが読むのはそこです。メインファイルにも VM TRACES セクションがあり、「生セクション」で開けます。どちらにもない場合は端末側が含めなかったということで、旧形式の単一 .txt には当時埋め込まれた分しかありません。残るのはメインファイルの drop box の索引だけで、項目名は出ますが本文はありません。

推定消費電力(mAh)は正確ですか?

正確ではなく、そもそも実測値ではありません。「Estimated power use」の数字は、各アプリが CPU・無線・画面を使った時間から Android 自身が推定したモデル値で、電池側で測ったものではありません。アプリ同士の比較には使えますが、絶対値としては当てになりません。新しい Android ではこのセクション自体が出力されないこともあり、その場合はランキングに mAh の表が出ないだけです。

何かアップロードされますか?

いいえ。zip はこのタブの Web Worker の中で展開・解析され、表もブラウザ内で作られ、サーバーには何も送りません。bugreport にはアカウント名、Wi-Fi 名、位置情報、通知の本文が入っているので、これは普通のファイル以上に重要です。タブを閉じればレポートは消えます。

対応している Android のバージョンは?

形式は Android 12 の bugreport で確認しました。セクションの構造、電池履歴の文法、ANR と tombstone の形式は AOSP の長年安定しているコードが出力するものなので、他のバージョンもおおむね読めますが、メーカーのビルドや新しいバージョンではセクションが追加・改名されることがあります。認識できない部分は推測せず生テキストのまま表示し、「生セクション」タブには常にファイル全体があります。

電池履歴が数日分しかないのはなぜですか?

Android は電池履歴を固定サイズのリングバッファに保存します。確認した端末では 4096 KB でした。バッファがいっぱいになると古いイベントから捨てて空きを作るので、それより前の履歴はファイルに残っておらず、復元もできません。履歴セクションの見出しに、バッファをどれだけ使ったかが出ています。

端末から直接 bugreport を取得できますか?

まだできません。端末側でレポートを生成して WebUSB で取り出す経路は実機で試していないため、このページが受け付けるのは手元にあるファイルだけです。開発者向けオプションか adb bugreport で生成してから、zip をドロップしてください。