- 导语
该篇文章主要讲述Bluetooth在Android系统中的实现架构。
1. BlueDroid简介
在Android4.2之前,Android使用的蓝牙协议栈都是Linux官方的BlueZ,在4.2之后Google推出了与博通合作开发的BlueDroid协议栈。BlueDroid被分为蓝牙嵌入式系统(BTE)和蓝牙应用(BTA)两层。BTE实现了蓝牙规格的核心功能,BTA实现了与Android框架层的通信。
2. Arch分析
从Android4.2一直到最新的Android8.0,BlueDroid的架构并没有大的变化。
现以Android 7.0为例进行简要介绍:
- 应用框架层
APPLICATION FRAMEWORK,该层是具体的蓝牙相关应用的代码,给蓝牙应用提供API调用。
代码目录为frameworks/base/core/java/android/bluetooth
该部分代码内部是通过Binder IPC机制来调用bluetooth进程。
- 蓝牙系统服务层
BLUETOOTH PROCESS,该层实际上最终被打包成Bluetooth.apk,其在Android框架层实现了蓝牙的service和profiles,并通过JNI调用HAL层。
代码目录为packages/apps/Bluetooth
- JNI层
JNI层代码调用到HAL层,并在蓝牙底层发生某些动作(如发现设备)的时候,接受HAL层的回调。
代码目录为packages/apps/Bluetooth/jni
- 硬件抽象层
HAL,该层定义了android.bluetooth API和蓝牙进程需要使用的标准接口,只有实现这些接口才能确保蓝牙硬件正常工作。
代码目录为hardware/libhardware/include/hardware
- 蓝牙协议栈
Bluetooth Stack,该层实现了通用的蓝牙HAL接口,并且可以进行客制化的扩展和配置。
代码目录为system/bt,6.0之前代码目录为/external/bluetooth/bluedroid
- 供应商扩展
Vendor extentions,该层专为蓝牙芯片供应商设计。供应商可以通过创建libbt-vendor.so并指定这些模块,来添加自定义扩展和HCI层调试。
代码目录可以根据需求自己设置。
Android 8.0 新特性预览
最新的Android版本,对Bluetooth的支持进行了如下增强:
- 支持 AVRCP 1.4 标准,该标准支持音乐库浏览。
- 支持蓝牙低功耗 (BLE) 5.0 标准。
- 将 Sony LDAC 编解码器集成到蓝牙堆叠中。此技术可以增强蓝牙在音频传输方面的能力,实现更高品质的音效。
关于LDAC实现主要在A2DP profile中。
-
总结
该篇文章主要讲述了Android下的Bluetooth架构,并顺带说明了Android8.0对于蓝牙的一些增强,详情请参考https://developer.android.com/about/versions/oreo/android-8.0.html