藍牙

Android 藍牙 HAL 圖標

Android 提供了預設的藍牙堆棧,支援經典藍牙和低功耗藍牙。使用藍牙,Android 裝置可以建立個人區域網絡,以便與附近的藍牙裝置發送和接收資料。

在 Android 4.3 及更高版本中,Android 藍牙堆疊提供了實現藍牙低功耗 (BLE) 的功能。若要充分利用 BLE API,請遵循Android 藍牙 HCI 要求。配備合格晶片組的 Android 裝置可實現經典藍牙或同時實現經典藍牙和 BLE。 BLE 不向後相容較舊的藍牙晶片組。

在 Android 8.0 中,本機藍牙堆疊完全符合藍牙 5 標準。要使用可用的藍牙 5 功能,裝置需要具有符合藍牙 5 標準的晶片組。

安卓架構

藍牙應用程式透過 Binder 與藍牙進程進行通訊。藍牙進程使用 JNI 與藍牙堆疊進行通信,並為開發人員提供對各種藍牙設定檔的存取。下圖顯示了藍牙堆疊的一般結構:

Android藍牙架構
圖 1. Android 藍牙架構
應用框架
應用程式框架層級是應用程式程式碼,它使用android.bluetooth API 與藍牙硬體進行互動。在內部,這段程式碼透過Binder IPC機制呼叫藍牙進程。
藍牙應用
藍牙應用程式位於packages/modules/Bluetooth/android/app中,被打包為 Android 應用程序,並在 Android 框架層實現藍牙設定檔。該應用程式透過 JNI 呼叫本機藍牙堆疊。
JNI
與 android.bluetooth 關聯的 JNI 代碼位於packages/modules/Bluetooth/android/app/jni 。當某些藍牙操作發生時(例如發現裝置時),JNI 程式碼會呼叫藍牙堆疊。
藍牙堆疊
AOSP 中提供了預設的藍牙堆疊,位於packages/modules/Bluetooth/system中。此堆疊實作通用藍牙 HAL,並透過擴充和配置變更對其進行自訂。
供應商實施
供應商設備使用硬體介面設計語言 (HIDL) 與藍牙堆疊互動。

HIDL

HIDL定義藍牙堆疊和供應商實作之間的介面。若要產生藍牙 HIDL 文件,請將藍牙介面檔案傳遞到 HIDL 產生工具中。介面檔案位於hardware/interfaces/bluetooth

藍牙協定堆疊開發

Android 藍牙堆疊是一個完全合格的藍牙堆疊。資格清單位於藍牙 SIG 網站上,編號為QDID 169365

核心藍牙堆疊位於packages/modules/Bluetooth 。開發發生在 AOSP 中,歡迎貢獻。

Android 7.x 及更早的架構

藍牙系統服務透過 JNI 與藍牙堆疊通信,並透過 Binder IPC 與應用程式通訊。該系統服務為開發人員提供了對各種藍牙設定檔的存取。下圖顯示了藍牙堆疊的一般結構:

Android藍牙架構
圖 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 文件參考