携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情
一、蓝牙概览
Android 提供支持经典蓝牙和蓝牙低功耗的默认蓝牙堆栈。借助蓝牙,Android 设备可以创建个人区域网络,以便通过附近的蓝牙设备发送和接收数据。
在 Android 4.3 及更高版本中,Android 蓝牙堆栈可提供实现蓝牙低功耗 (BLE) 的功能。要充分利用 BLE API,请遵循 Android 蓝牙 HCI 要求。具有合格芯片组的 Android 设备可以实现经典蓝牙或同时实现经典蓝牙和 BLE。BLE 不能向后兼容较旧版本的蓝牙芯片组。
在 Android 8.0 中,原生蓝牙堆栈完全符合蓝牙 5 的要求。要使用可用的蓝牙 5 功能,该设备需要具有符合蓝牙 5 要求的芯片组。
1.1、Android 8 架构
-
应用框架 处于应用框架级别的是应用代码,它使用
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 8.0蓝牙堆栈是一个完全限定的蓝牙堆栈。限定列表位于蓝牙 SIG 网站上的 QDID 97584 下。 核心蓝牙堆栈位于system/bt中。
1.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模块并指定这些组件。