二 Android平臺藍芽架構
藍芽
在 Android 4.3 及更高版本中,Android 藍芽堆疊可提供實現藍芽低功耗 (BLE) 的功能。要充分利用 BLE API,請遵循 Android 藍芽 HCI 要求。具有合格晶片組的 Android 裝置可以實現經典藍芽或同時實現經典藍芽和 BLE。BLE 不能向後相容較舊版本的藍芽晶片組。
在 Android 8.0 中,原生藍芽堆疊完全符合藍芽 5 的要求。要使用可用的藍芽 5 功能,該裝置需要具有符合藍芽 5 要求的晶片組。
Android 8.0 及以前版本之間的原生藍芽堆疊的最大變化是使用高音。Android 8.0 中的供應商實現必須使用 HIDL 而不是 libbt-vendor。
Android 8.0 架構
藍芽應用通過 Binder 與藍芽程序進行通訊。藍芽程序使用 JNI 與藍芽堆疊通訊,並向開發者提供對各種藍芽配置檔案的訪問許可權。下圖顯示了藍芽堆疊的常規結構:
應用框架
處於應用框架級別的是應用程式碼,它使用 android.bluetooth API 與藍芽硬體進行互動。此程式碼在內部通過 Binder IPC 機制呼叫藍芽程序。
藍芽系統服務
藍芽系統服務(位於 packages/apps/Bluetooth 中)被打包為 Android 應用,並在 Android 框架層實現藍芽服務和配置檔案。此應用通過 JNI 呼叫原生藍芽堆疊。
JNI
與 android.bluetooth 相關聯的 JNI 程式碼位於 packages/apps/Bluetooth/jni 中。當發生特定藍芽操作時(例如發現裝置時),JNI 程式碼會呼叫藍芽堆疊。
藍芽堆疊
系統在 AOSP 中提供了預設藍芽堆疊,它位於 system/bt 中。該堆疊會實現常規藍芽 HAL,並通過擴充套件程式和更改配置對其進行自定義。
供應商實現
供應商裝置使用硬體介面設計語言 (HIDL) 與藍芽堆疊互動。
HIDL
HIDL 定義了藍芽堆疊和供應商實現之間的介面。要生成藍芽 HIDL 檔案,請將藍芽介面檔案傳遞到 HIDL 生成工具中。介面檔案位於 hardware/interfaces/bluetooth 下。
Android 7.x 及更早版本的架構
HAL
硬體抽象層定義了 android.bluetooth API 和藍芽程序會呼叫的標準介面,並且您必須實現該接口才能使藍芽硬體正常工作。藍芽 HAL 的標頭檔案是 hardware/libhardware/include/hardware/bluetooth.h。 另外,請檢視所有 hardware/libhardware/include/hardware/bt_*.h 檔案。