藍牙

Android 藍牙 HAL 圖標

Android 提供了支持經典藍牙和低功耗藍牙的默認藍牙堆棧。使用藍牙,Android 設備可以創建個人區域網絡,以便與附近的藍牙設備發送和接收數據。

在 Android 4.3 及更高版本中,Android 藍牙堆棧提供了實現藍牙低功耗 (BLE) 的能力。要充分利用 BLE API,請遵循Android 藍牙 HCI 要求。具有合格芯片組的 Android 設備可以實現經典藍牙或經典藍牙和 BLE。 BLE 不向後兼容舊的藍牙芯片組。

在 Android 8.0 中,原生藍牙堆棧完全符合藍牙 5 標準。要使用可用的藍牙 5 功能,設備需要有一個符合藍牙 5 標準的芯片組。

安卓架構

藍牙應用程序通過 Binder 與藍牙進程通信。藍牙進程使用 JNI 與藍牙堆棧進行通信,並為開發人員提供對各種藍牙配置文件的訪問權限。此圖顯示了藍牙堆棧的一般結構:

安卓藍牙架構
圖 1. Android 藍牙架構
應用框架
在應用程序框架級別是應用程序代碼,它使用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 與應用程序通信。該系統服務為開發人員提供了對各種藍牙配置文件的訪問權限。此圖顯示了藍牙堆棧的一般結構:

安卓藍牙架構
圖 2. Android 7.x 及更早的藍牙架構
應用框架
在應用程序框架級別是應用程序代碼,它利用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 文件參考