Android 提供了支持經典藍牙和低功耗藍牙的默認藍牙堆棧。使用藍牙,Android 設備可以創建個人區域網絡,以便與附近的藍牙設備發送和接收數據。
在 Android 4.3 及更高版本中,Android 藍牙堆棧提供了實現藍牙低功耗 (BLE) 的能力。要充分利用 BLE API,請遵循Android 藍牙 HCI 要求。具有合格芯片組的 Android 設備可以實現經典藍牙或經典藍牙和 BLE。 BLE 不向後兼容舊的藍牙芯片組。
在 Android 8.0 中,原生藍牙堆棧完全符合藍牙 5 標準。要使用可用的藍牙 5 功能,設備需要有一個符合藍牙 5 標準的芯片組。
安卓架構
藍牙應用程序通過 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 藍牙堆棧是完全合格的藍牙堆棧。資格列表位於藍牙 SIG 網站上,編號為 QDID 169365 。
核心藍牙堆棧位於system/bt
中。在 AOSP 中進行開發,歡迎貢獻。
Android 7.x 及更早的架構
藍牙系統服務通過 JNI 與藍牙堆棧通信,並通過 Binder IPC 與應用程序通信。該系統服務為開發人員提供了對各種藍牙配置文件的訪問權限。此圖顯示了藍牙堆棧的一般結構:
- 應用框架
- 在應用程序框架級別是應用程序代碼,它利用android.bluetooth API 與藍牙硬件進行交互。在內部,這段代碼通過Binder IPC機制調用藍牙進程。
- 藍牙系統服務
- 藍牙系統服務,位於
packages/apps/Bluetooth
,被打包為 Android 應用,在 Android 框架層實現藍牙服務和配置文件。這個應用程序通過 JNI 調用 HAL 層。 - JNI
- 與android.bluetooth關聯的 JNI 代碼位於
packages/apps/Bluetooth/jni
中。當某些藍牙操作發生時,例如發現設備時,JNI 代碼調用 HAL 層並從 HAL 接收回調。 - 哈爾
- 硬件抽象層定義了android.bluetooth API 和藍牙進程調用的標準接口,您必須實現該接口才能使您的藍牙硬件功能正確。藍牙 HAL 的頭文件是
hardware/libhardware/include/hardware/bluetooth.h
。此外,查看所有hardware/libhardware/include/hardware/bt_*.h
文件。 - 藍牙堆棧
- 為您提供了默認的藍牙堆棧,位於
system/bt
中。該堆棧實現通用藍牙 HAL 並使用擴展和配置更改對其進行自定義。 - 供應商擴展
- 要添加自定義擴展和 HCI 層以進行跟踪,您可以創建一個 libbt-vendor 模塊並指定這些組件。
實施 HAL
藍牙 HAL 位於/hardware/libhardware/include/hardware/bluetooth.h
中。 bluetooth.h
文件包含藍牙協議棧的基本接口,您必須實現其功能。
特定於配置文件的文件位於同一目錄中。有關詳細信息,請參閱HAL 文件參考。