蓝牙打开从app层到协议栈的跨度太大,仅仅看代码很容易迷失方向,先从log看起。
01-18 18:25:31.570 D/BluetoothAdapterService(21885): onCreate() // adapterservice启动
01-18 18:25:31.570 I/BluetoothVendorJni(21885): classInitNative: succeeds
01-18 18:25:31.570 D/BluetoothAdapterState(21885): make() - Creating AdapterState
01-18 18:25:31.580 I/BluetoothAdapterState(21885): Entering OffState
01-18 18:25:31.580 I/bt_btif (21885): init 然后调用到init方法
01-18 18:25:31.580 D/bt_osi_allocation_tracker(21885): canary initialized
01-18 18:25:31.590 I/bt_osi_thread(21885): run_thread: thread id 21915, thread name stack_manager started
在AdapterService文件里面会先调用classInitNative方法,这个方法的定义在JNI文件中,定义如下:
static void classInitNative(JNIEnv* env, jclass clazz) {
int err;
hw_module_t* module;
jclass jniCallbackClass =
env->FindClass("com/android/bluetooth/btservice/JniCallbacks");
sJniCallbacksFie