2

開発者オプション UI から HCI Bluetooth スヌープ ログを有効にする方法はよく知られています。
これをプログラムで達成する方法はありますか?

4

1 に答える 1

4

開発者向けオプションの使用:

  • 開発者向けオプションを有効にすると、これらのオプションで Bluetooth snoop Logging も有効にできます。/data/misc/bluetooth/logs/再起動後、 (これらのファイルにアクセスするために root が必要かどうかはわかりません)、

bt_stack.conf の使用 (root が必要) - (Android 8.0+ 用に更新)


bt_stack.confの下に/system/etc/bluetoothあり、既存の conf ファイルも の下にあり/data/misc/bluedroidます。

ほとんどの場合、次の手順を使用して verity を無効にする必要があります。

  • adb -s <DEVICE> root
  • adb -s <DEVICE> disable-verity
  • adb -s <DEVICE> reboot(変更を適用するには)
  • 次に、再起動後に再度 root に入ります。adb -s <DEVICE> root
  • その後、再マウントし、adb -s <DEVICE> remount
  • コマンドを使用して再マウントすることもできますmount -o rw,remount <PARTITION>
  • その後、ファイルをプッシュできるようになり、変更を加えて再起動できます。
  • bt_stack.confファイルの編集(セットBtSnoopLogOutput=true)
  • Bluetooth を無効にしてから有効にします。これにより、HCI スヌープ ログが開始されます。
  • 十分であると判断したら BtSnoopLogOutput=false、Bluetooth の設定とリセット中にファイルを再度編集します。これにより、HCI スヌープ ログが停止します。
  • 私が通常行うことは、それぞれのファイルをプルし、お気に入りのエディター (通常viまたは VSCode) で変更を加えてから、これらのコマンドを使用してプッシュバックすることです
  • adb -s <DEVICE> pull /system/etc/bluetooth/bt_stack.conf
  • adb -s <DEVICE> push bt_stack.conf /system/etc/bluetooth/.
  • とともに、BTSnoop loggingを使用してすべてのスタック トレースを有効にすることもできますbt_stack.conf

Android 9.0 r34、MSM Kernel 4.4 のファイルは次のようになります。

root@console:/system/etc/bluetooth# cat bt_stack.conf
                                                             
# Enable trace level reconfiguration function
# Must be present before any TRC_ trace level settings
TraceConf=true

# Trace level configuration
#   BT_TRACE_LEVEL_NONE    0    ( No trace messages to be generated )
#   BT_TRACE_LEVEL_ERROR   1    ( Error condition trace messages )
#   BT_TRACE_LEVEL_WARNING 2    ( Warning condition trace messages )
#   BT_TRACE_LEVEL_API     3    ( API traces )
#   BT_TRACE_LEVEL_EVENT   4    ( Debug messages for events )
#   BT_TRACE_LEVEL_DEBUG   5    ( Full debug messages )
#   BT_TRACE_LEVEL_VERBOSE 6    ( Verbose messages ) - Currently supported for TRC_BTAPP only.
TRC_BTM=2
TRC_HCI=2
TRC_L2CAP=2
TRC_RFCOMM=2
TRC_OBEX=2
TRC_AVCT=2
TRC_AVDT=2
TRC_AVRC=2
TRC_AVDT_SCB=2
TRC_AVDT_CCB=2
TRC_A2D=2
TRC_SDP=2
TRC_SMP=2
TRC_BTAPP=2
TRC_BTIF=2
TRC_BNEP=2
TRC_PAN=2
TRC_HID_HOST=2
TRC_HID_DEV=2

# This is Log configuration for new C++ code using LOG() macros.
# See libchrome/base/logging.h for description on how to configure your logs.
# sample configuration:
#LoggingV=--v=0
#LoggingVModule=--vmodule=*/btm/*=1,btm_ble_multi*=2,btif_*=1

# PTS testing helpers

# Secure connections only mode.
# PTS_SecurePairOnly=true

# Disable LE Connection updates
#PTS_DisableConnUpdates=true

# Disable BR/EDR discovery after LE pairing to avoid cross key derivation errors
#PTS_DisableSDPOnLEPair=true

# SMP Pair options (formatted as hex bytes) auth, io, ikey, rkey, ksize
#PTS_SmpOptions=0xD,0x4,0xf,0xf,0x10

# PTS AVRCP Test mode
#PTS_AvrcpTest=true

# SMP Certification Failure Cases
# Set any of the following SMP error values (from smp_api_types.h)
# to induce pairing failues for various PTS SMP test cases.
# Setting PTS_SmpFailureCase to 0 means normal operation.
# Failure modes:
#
#  SMP_PASSKEY_ENTRY_FAIL = 1
#  SMP_PAIR_AUTH_FAIL = 3
#  SMP_CONFIRM_VALUE_ERR = 4
#  SMP_PAIR_NOT_SUPPORT = 5
#  SMP_PAIR_FAIL_UNKNOWN = 8
#  SMP_REPEATED_ATTEMPTS = 9
#  SMP_NUMERIC_COMPAR_FAIL = 12
#PTS_SmpFailureCase=0

非表示の Android API の使用


このアプローチでは、アプリケーションにBLUETOOTH_ADMINアクセス許可が必要であることに注意してください。
これで問題なければ、Android システム設定アプリが使用するのと同じコードを使用できます。

private void writeBtHciSnoopLogOptions() {
    BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
    adapter.configHciSnoopLog(true);
}

configHciSnoopLogBluetoothAdapterclassの隠し API の一部であるため、有効にする方法を確認してください。

SL4Aの使用


SL4A は、Android デバイス上でスクリプトと対話型インタープリターを直接編集および実行できるようにすることで、スクリプト言語を Android にもたらします。これらのスクリプトは、本格的な Android アプリケーションで使用できる API の多くにアクセスできますが、非常に単純化されたインターフェイスを使用して簡単に作業を完了できます。

SL4A をサポートしてビルドされた Android イメージの場合は、次の方法を使用できますBluetoothFacade

@Rpc(description = "Enable or disable the Bluetooth HCI snoop log")
public boolean bluetoothConfigHciSnoopLog(
        @RpcParameter(name = "value", description = "enable or disable log")
        Boolean value
        ) {
    return mBluetoothAdapter.configHciSnoopLog(value);
} 

GithubのAPI リファレンスは古くなっていますが、公式の AOSPリポジトリ( Common\src\com\googlecode\android_scripting\facade\bluetooth)で最新のものを確認できます。

HCI スヌープ ログを有効にする Python スクリプトは、次のようになります。

from android import Android

droid = Android()
droid.bluetoothConfigHciSnoopLog(True)

ロギングが完了すると、HCI Snoop のログを見つけることができます/sdcard/btsnoop_hci.log

于 2016-04-12T13:17:19.203 に答える