- 導(dǎo)語
該篇文章主要講述Bluetooth在Android系統(tǒng)中的實(shí)現(xiàn)架構(gòu)。
1. BlueDroid簡介
在Android4.2之前,Android使用的藍(lán)牙協(xié)議棧都是Linux官方的BlueZ,在4.2之后Google推出了與博通合作開發(fā)的BlueDroid協(xié)議棧。BlueDroid被分為藍(lán)牙嵌入式系統(tǒng)(BTE)和藍(lán)牙應(yīng)用(BTA)兩層。BTE實(shí)現(xiàn)了藍(lán)牙規(guī)格的核心功能,BTA實(shí)現(xiàn)了與Android框架層的通信。
2. Arch分析
從Android4.2一直到最新的Android8.0,BlueDroid的架構(gòu)并沒有大的變化。

Android Bluetooth Arch
現(xiàn)以Android 7.0為例進(jìn)行簡要介紹:
- 應(yīng)用框架層
APPLICATION FRAMEWORK,該層是具體的藍(lán)牙相關(guān)應(yīng)用的代碼,給藍(lán)牙應(yīng)用提供API調(diào)用。
代碼目錄為frameworks/base/core/java/android/bluetooth
該部分代碼內(nèi)部是通過Binder IPC機(jī)制來調(diào)用bluetooth進(jìn)程。
- 藍(lán)牙系統(tǒng)服務(wù)層
BLUETOOTH PROCESS,該層實(shí)際上最終被打包成Bluetooth.apk,其在Android框架層實(shí)現(xiàn)了藍(lán)牙的service和profiles,并通過JNI調(diào)用HAL層。
代碼目錄為packages/apps/Bluetooth
- JNI層
JNI層代碼調(diào)用到HAL層,并在藍(lán)牙底層發(fā)生某些動(dòng)作(如發(fā)現(xiàn)設(shè)備)的時(shí)候,接受HAL層的回調(diào)。
代碼目錄為packages/apps/Bluetooth/jni
- 硬件抽象層
HAL,該層定義了android.bluetooth API和藍(lán)牙進(jìn)程需要使用的標(biāo)準(zhǔn)接口,只有實(shí)現(xiàn)這些接口才能確保藍(lán)牙硬件正常工作。
代碼目錄為hardware/libhardware/include/hardware
- 藍(lán)牙協(xié)議棧
Bluetooth Stack,該層實(shí)現(xiàn)了通用的藍(lán)牙HAL接口,并且可以進(jìn)行客制化的擴(kuò)展和配置。
代碼目錄為system/bt,6.0之前代碼目錄為/external/bluetooth/bluedroid
- 供應(yīng)商擴(kuò)展
Vendor extentions,該層專為藍(lán)牙芯片供應(yīng)商設(shè)計(jì)。供應(yīng)商可以通過創(chuàng)建libbt-vendor.so并指定這些模塊,來添加自定義擴(kuò)展和HCI層調(diào)試。
代碼目錄可以根據(jù)需求自己設(shè)置。
Android 8.0 新特性預(yù)覽
最新的Android版本,對Bluetooth的支持進(jìn)行了如下增強(qiáng):
- 支持 AVRCP 1.4 標(biāo)準(zhǔn),該標(biāo)準(zhǔn)支持音樂庫瀏覽。
- 支持藍(lán)牙低功耗 (BLE) 5.0 標(biāo)準(zhǔn)。
- 將 Sony LDAC 編解碼器集成到藍(lán)牙堆疊中。此技術(shù)可以增強(qiáng)藍(lán)牙在音頻傳輸方面的能力,實(shí)現(xiàn)更高品質(zhì)的音效。
關(guān)于LDAC實(shí)現(xiàn)主要在A2DP profile中。
-
總結(jié)
該篇文章主要講述了Android下的Bluetooth架構(gòu),并順帶說明了Android8.0對于藍(lán)牙的一些增強(qiáng),詳情請參考https://developer.android.com/about/versions/oreo/android-8.0.html