藍牙

Android Bluetooth HAL 圖示

Android 提供預設的藍牙堆疊,可同時支援經典藍牙和藍牙低功耗。透過藍牙,Android 裝置可以建立個人區域網路,與附近的藍牙裝置傳送及接收資料。

在 Android 4.3 以上版本中,Android 藍牙堆疊可實作藍牙低功耗 (BLE)。如要充分運用 BLE API,請遵循 Android Bluetooth HCI 規定。搭載合格晶片組的 Android 裝置可以實作經典藍牙,也可以實作經典藍牙和 BLE。BLE 與舊版藍牙晶片不相容。

在 Android 8.0 中,原生藍牙堆疊完全符合 Bluetooth 5 的資格。如要使用可用的藍牙 5 功能,裝置必須具備符合藍牙 5 標準的晶片組。

Android 架構

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

Android Bluetooth 架構
圖 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 藍牙堆疊是完整合格的藍牙堆疊。資格認證清單位於 Bluetooth SIG 網站上的 QDID 169365 下方。

核心藍牙堆疊位於 packages/modules/Bluetooth 中。開發作業會在 AOSP 中進行,歡迎您貢獻心力。

Android 7.x 以下版本架構

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

Android Bluetooth 架構
圖 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 接收回呼。
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 檔案參考資料