藍牙

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 藍牙堆棧是一個完全合格的藍牙堆棧。資格列表位於 Bluetooth 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.hbluetooth.h文件包含藍牙協議棧的基本接口,您必須實現其功能。

特定於配置文件的文件位於同一目錄中。有關詳細信息,請參閱HAL 文件參考