はじめに
BluetoothのHCIスヌープログを取得する方法をまとめました。確認はPixel 4a(Android 13)で行いました。他のOSバージョン、他の機種では画面や手順が異なる場合がありますのご注意ください。
Linuxで取得する方法もあります → https://qiita.com/KentaHarada/items/8eeb7ada6ae974e44a3b
Bluetooth HCIスヌープログとは?
HCI(Host Controller Interface)はBluetoothのプロトコルの一種で
BluetoothプロトコルスタックとBluetoothのチップ間のプロトコルです。
エアーを飛んでいるパケットとは違いますが、高価なアナライザー不要である程度の解析ができます。
どんな時に使うの?
AndroidアプリとBluetoothデバイスの接続不良など、問題の解析に使うことが多いです。アプリではBluetoothの細かい切断理由や、どちら側から切断されたのか?が分からないことがあります。そういった時に、切断理由や切断元を特定するために用いると便利です。
確認環境
- MacBook Pro (13-inch, 2020) macOS Monterey 12.6.1
- Pixel4a(Android 13)
- Wireshark Version 3.2.3
1. Wiresharkをインストールする
Wiresharkでログを解析するので、先にインストールしておきます。
Wireshark の使い方
2. Android端末の開発者モードをONにする
[設定] > [デバイス情報] > [ビルド番号] を 7 回タップすると開発者モードに入れます。
3. Bluetooth HCIスヌープログをONにする
[設定] > [システム] > [開発者向けオプション]
Bluetooth HCIスヌープログをON
を選択する。
注意! 必ず有効
を選択してください。
有効(フィルタ済み)
を選択するとデバイスとのデータ送受信のログがフィルタリングされて肝心の通信部分のログが見えません。
例えば、Bluetooth Low Energyの場合はGATT通信部分(Write/Notify/Indicate等)がフィルタリングされて見えなくなります。
4.Bluetoothをオフ・オンする
Bluetoothを一度オフしてからオンにします。
こうすることでHCIスヌープログが有効になります。
5. ログを取りたいBluetoothの操作を行う
Android端末とBluetooth機器を使って目的のログを取るための操作を行います。
6. バグレポートを生成する
[設定] > [システム] > [開発者向けオプション] > [バグレポート]
を選択する。
対話型レポート
を選択する。(完全レポートでもOKみたいです)
しばらく時間がかかるので、2〜3分待ちます。
バグレポートの生成が完了したら、この通知をタップして共有(メール等)します。
7.バグレポートのZIPファイルを展開する
HCIスヌープログは FS/data/misc/bluetooth/logs
に入っています。
8. Wiresharkでログを解析する
btsnoop_hci.log
をWiresharkで開いてログを解析します。
細かい解析方法についてはBluetooth SIGが公開しているスペックを参照してください。
参考
https://source.android.com/docs/core/connect/bluetooth/verifying_debugging?hl=ja
https://developer.android.com/studio/command-line/dumpsys?hl=ja