Android 版本与 Bluetooth 版本之间是否存在必然关系?
最近开始 Bluetooth 开发,一直纠结一个问题:
Android 版本与 Bluetooth 版本之间是否存在必然关系?例如:Android 4.3 版本的手机上的 Bluetooth 模块一定是支持 BLE (Bluetooth Low Energy) 的吗?
答案是否定的,比如说有一个设备厂商,在自己的 Android 4.3 系统的设备上移除了 Bluetooth 模块,或者在自己的 Android 4.3 系统设备上的 Bluetooth 模块仍然采用的是 Bluetooth 2.1 ,这种情况在理论上来说是有可能的。当然,正常情况下,设备厂商如果要在自己的 Android 4.3 系统设备上提供 Bluetooth 模块的话,一定会考虑到自己的 Bluetooth 版本和当前设备的 Android 系统版本之间的关系,这是针对设备的普通使用者和开发者考虑的问题。当然,如果说设备厂商生产了一款 Android 1.6 系统的设备,在上面采用了 BLE 模块,当然由于 Android 1.6 系统没有对 BLE 操作的 API。如果说所有 Android 1.6 系统不支持的对 BLE 模块的操作,都自己开发相应的 API,也是可以完成在 Android 1.6 系统的设备上对 BLE 操作的。这种情况,从理论上来说也是可行的,只不过一般不会有厂商这么做。
通过 Android 官网资料,我们可以看到从 Android 1.0 (API Level 1) – Android 4.4W (API Level 20) 中 Android 官方版本的更迭对 Bluetooth 支持的变化。
- Android 1.0 Base / API Level 1
- API:不支持 Bluetooth
- Android 1.1 Base / API Level 2
- API:不支持 Bluetooth
- Android 1.5 Cupcake / API Level 3
- 新增 Bluetooth 功能:
1.立体声 Bluetooth 支持:
A2DP [Advanced Audio Distribution Profile]
AVCRP [Audio/Video Remote Control Profile]
2.自动配对
3.提升 Handsfree 体验 - 此 Android 版本中的 Bluetooth API 全部隐藏,但是我们可以通过反射来调用!
-
@hide AtCommandHandler.java @hide AtCommandResult.java @hide AtParser.java @hide BluetoothA2dp.java @hide BluetoothAudioGateway.java @hide BluetoothClass.java @hide BluetoothDevice.java @hide BluetoothError.java @hide BluetoothHeadset.java @hide BluetoothIntent.java @hide Database.java @hide HeadsetBase.java @hide RfcommSocket.java @hide ScoSocket.java
- 新增 Bluetooth 功能:
- Android 1.6 Donut / API Level 4
- 无新增 Bluetooth 功能
- API:无较大更改
- Android 2.0 Eclair / API Level 5
- 无新增 Bluetooth 功能
- API:无较大更改
- Android 2.1 Eclair / API Level 7
- 新增 Bluetooth 功能:
1.支持 Bluetooth 2.1
2.新 Profile
OPP [Object Push Profile]
PBAP [Phone Book Access Profile] - 新增 API:
1.打开/关闭 Bluetooth
2.设备和服务扫描
3.通过 RFCOMM 连接远程设备并且发送和接收数据
4.发布 RFCOMM 服务并且监听传入的 RFCOMM 连接 -
新增 API: @hide BluetoothDevicePicker.java @hide BluetoothInputStream.java @hide BluetoothOutputStream.java @hide BluetoothPbap.java @hide BluetoothUuid.java BluetoothServerSocket.java BluetoothSocket.java BluetoothAdapter.java 隐藏 API 开放: BluetoothClass.java BluetoothDevice.java 删除 API: BluetoothError.java BluetoothIntent.java Database.java RfcommSocket.java
- 新增 Bluetooth 功能:
- Android 2.0.1 Eclair_0_1 / API Level 6
- 无新增 Bluetooth 功能
- 新增 API:
1.ACTION_REQUEST_ENABLE 和 ACTION_REQUEST_DISCOVERABLE 返回值变化: -
ACTION_REQUEST_ENABLE return RESULT_OK 表示 Bluetooth 成功启用 return RESULT_CANCELED 表示用户拒绝询问启用 Bluetooth 备注:不是以前那样返回 0,-1 或者 -2 ACTION_REQUEST_DISCOVERABLE return RESULT_CANCELED 表示用户拒绝询问启用 Bluetooth 或者 Bluetooth 未被成功启用 备注:不是以前那样返回 0,-1 或者 -2
- Android 2.2.x Froyo / API Level 8
- 新增 Bluetooth 功能:
1.通过 Bluetooth 语音拨号
2.与其它设备分享联系人
3.支持车载 Bluetooth 和 Desk Docks
4.改善与车载套件和耳机的兼容性矩阵 -
新增API: AtParserTest.java
- 新增 Bluetooth 功能:
- Android 2.3/2.3.1/2.3.2 Gingerbread / API Level 9
- 无新增 Bluetooth 功能
-
新增API: @hide BluetoothDeviceProfileState.java @hide BluetoothProfileState.java BluetoothRebootStressTest.java BluetoothStressTest.java BluetoothTestRunner.java BluetoothTestUtils.java
- Android 2.3.3/2.3.4 Gingerbread_MR1 / API Level 10
- 无新增 Bluetooth 功能
-
新增 API:
1.添加了对 Bluetooth 非安全 Socket 连接的 platform 和 API 的支持。可以让那些不需要提供验证界面的应用通过简单的设备来通信
- Android 3.0.x Honeycomb / API Level 11
- 新增 Bluetooth 功能:
1.能让应用查询已经连接上 Bluetooth 设备的 Bluetooth Profile、音频状态等,然后通知用户
2.可以通过 Bluetooth 来连接全键盘
3.新增对 Bluetooth tethering 的支持意味着更多类型的设备能够共享 Android 设备的网络连接 -
新增 API:
1.允许应用检验已经连接上 Bluetooth A2DP 和 Headset Profile 的设备的状态,比如设备是否已经连接上或者设备当前的电量
2. Bluetooth 设备连接和断开时回调 -
新增 API: BluetoothAssignedNumbers.java BluetoothProfile.java 移除 API: AtCommandHandler.java AtCommandResult.java AtParser.java AtParserTest.java BasicAdapterTest.java BluetoothAudioGateway.java BluetoothDevicePicker.java BluetoothProfileState.java BluetoothInputStream.java BluetoothOutputStream.java BluetoothPbap.java BluetoothRebootStressTest.java BluetoothStressTest.java BluetoothTestRunner.java BluetoothTestUtils.java BluetoothUuid.java HeadsetBase.java ScoSocket.java
- 新增 Bluetooth 功能:
- Android 3.1.x Honeycomb_MR1 / API Level 12
- 新增 Bluetooth 功能:
1.系统可以通过 Bluetooth HID 方式同时接入一到多款输入设备
2.新增支持操作杆和游戏手柄 Bluetooth HID 方式连接 - API 变化未知 (未拿到源码)
- 新增 Bluetooth 功能:
- Android 3.2 Honeycomb_MR2 / API Level 13
- 无新增 Bluetooth 功能
-
新增 API: ConnectivityManager TYPE_BLUETOOTH
- Android 4.0/4.0.1/4.0.2 Ice Cream Sandwich / API Level 14
- 新增 Bluetooth 功能:
1.新增支持连接 Bluetooth HDP [Health Device Profile)] 设备,通过第三方应用的支持,用户可以连接到医院、健身中心或者家庭等场合中的无线医疗设备和传感器。
2.开发者可以使用 Android Beam (Android 自带 NFC 功能) 通过 Bluetooth 来实现连接和数据传输,不需要用户可视配对。 - 新增 API:
1.可以与 Bluetooth HDP [Health Device Profile)] 设备连接和通信。
新增 API: @hide BluetoothInputDevice.java @hide BluetoothPan.java @hide BluetoothDeviceProfileState.java @hide BluetoothTetheringDataTracker.java BluetoothHealth.java BluetoothHealthAppConfiguration.java BluetoothHealthCallback.java 移除 API 重新加入: @hide AtCommandHandler.java @hide AtCommandResult.java @hide AtParser.java @hide BluetoothAudioGateway.java @hide BluetoothDevicePicker.java @hide BluetoothProfileState.java @hide BluetoothInputStream.java @hide BluetoothOutputStream.java @hide BluetoothPbap.java @hide BluetoothUuid.java @hide HeadsetBase.java BluetoothRebootStressTest.java BluetoothStressTest.java BluetoothTestRunner.java BluetoothTestUtils.java - 新增 Bluetooth 功能:
- Android 4.0.3/4.0.4 Ice Cream Sandwich_MR1 / API Level 15
- 无新增 Bluetooth 功能
-
新增 API: fetchUuidsWithSdp() getUuids() 让应用能够检测到远程设备支持的特性(UUIDs) 调用 fetchUuidsWithSdp() 系统将执行一个远程设备的服务扫描来获取支持的UUID,然后会发送 ACTION_UUID的广播结果
- Android 4.1 4.1.1 Jelly Bean / API Level 16
- 无新增 Bluetooth 功能
- 新增 API:
1.此 Android 版本的设备可以使用 Android Beam 功能通过 Bluetooth 来发送图片和视频。在双方设备上,Android Beam 使用 NFC 功能开启 Bluetooth ,立即配对,一旦完成任务就会自动的断开 Bluetooth 连接。
2.Android Beam 功能已经支持通过 Bluetooth 传输大数据。在设备间不需要可见的配对。你的应用无需其它操作就可以利用 Bluetooth 来传输数据。
3.MediaRouter MediaRouteActionProvider MediaRouteButton 为播放媒体提供了标准的机制和界面。内置支持有线耳机和 A2DP Bluetooth 耳机和扬声器,可以在你的应用中添加自定义的 Routing 选项。
- Android 4.2/4.2.2 Jelly Bean_MR1 / API Level 17
- 无新增 Bluetooth 功能
- 新增 Bluetooth 变化:
1.引入了一种新的针对 Android 设备优化的 Bluetooth 协议栈 BlueDroid,从而取代 BlueZ 协议栈。Bluedroid 协议栈由 Google 和 Broadcom 公司共同开发,相对于 BlueZ 协议栈,BlueDroid 提升了兼容性和可靠性。
- Android 4.3 Jelly Bean_MR2 / API Level 18
- 新增 Bluetooth 功能:
1.支持 BLE (Bluetooth Low Energy)
2.内置支持 Bluetooth AVRCP 1.3,基于 Google 和 Broadcom 公司功能研发的针对于 Android 设备优化的新的蓝牙协议栈 BlueDroid - 新增 API:
1.提供单独的标准的 API 对 BLE (Bluetooth Low Energy) 的支持
备注:Classic Bluetooth,Bluetooth High Speed,Bluetooth Low Energy 同属 Bluetooth 4.0 协议。Bluetooth 4.0 也叫做 Bluetooth Smart
新增 API: BluetoothGatt.java BluetoothGattCallback.java BluetoothGattCharacteristic.java BluetoothGattDescriptor.java BluetoothGattServer.java BluetoothGattServerCallback.java BluetoothGattService.java BluetoothManager.java - 新增 Bluetooth 功能:
- Android 4.4 Kitkat / API Level 19
- 新增 Bluetooth 功能:
1.新增两种新 Proifle 支持:
HID [Human Interface Device]
MAP [Message Access Profile]
新增 API: @hide BluetoothMap.java - 新增 Bluetooth 功能:
- Android 4.4W / API Level 20
- 无新增 Bluetooth 功能
新增 API: @hide BluetoothAdvScanData.java BluetoothInstrumentation.java
Android 中的 Bluetooth 协议栈
Android 蓝牙协议栈演进:从 BlueZ 到 BlueDroid
BlueZ 时代:Linux 内核的官方蓝牙协议栈
Android 4.2 之前,Android 一直沿用 Linux 官方的蓝牙协议栈 BlueZ;该协议栈由高通公司于 2001 年 5 月基于 GPL 协议发布,发布仅一个月后即被 Linus Torvalds 纳入 Linux 2.4.6 内核,成为 Linux 内核中官方标准的蓝牙协议栈。
随着 Android 设备的普及,BlueZ 持续迭代完善。Android 4.1 中集成的 BlueZ 版本已升级至 4.93,完整支持蓝牙核心规范 4.0(含低功耗蓝牙 BLE),并实现了当时绝大部分蓝牙应用规范(Profile),如 A2DP、AVRCP、HFP、HSP、OPP 等,在兼容性和稳定性方面经过了广泛验证。
尽管 BlueZ 功能强大且正值巅峰,但其架构设计存在固有挑战:
| 问题 | 说明 |
|---|---|
| 依赖 DBUS | 深度依赖 DBUS 进程间通信,系统开销大,不利于上层框架的简洁设计 |
| 模块耦合度高 | 协议栈核心与上层 API 耦合紧密,芯片厂商独立适配和定制难度大 |
| 接口不统一 | 各芯片厂商需自行适配不同版本的 BlueZ,加剧了 Android 生态的碎片化 |
| 移植成本高 | 在不同蓝牙芯片或非 Linux 平台间移植 BlueZ 工作量较大 |
BlueDroid:Google 的回应与架构重构
从 Android 4.2(Jelly Bean) 开始,Google 在源码中推出了与博通(Broadcom)联合开发的 BlueDroid,意图逐步取代 BlueZ。虽然初期因成熟度问题,多数厂商仍继续使用 BlueZ,但一个重要信号已经出现:高通作为 BlueZ 的原创始者,也已计划在其芯片参考设计中移除 BlueZ,转向仅支持 BlueDroid。
BlueDroid 的核心优势:
- 框架更简洁清晰:模块职责划分明确,降低理解和维护成本
- 彻底摆脱 DBUS:借助 HAL 层完成解耦,减少系统开销,提升响应效率
- 芯片平台无关性:上层 Java 框架完全无需关心底层芯片型号,厂商只需按 HAL 接口规范适配即可
整体架构如下图所示:
各层职责如下:
应用框架层:开发者通过 android.bluetooth 包下的公开 API 调用蓝牙功能,这是应用程序与系统蓝牙服务交互的唯一官方接口。
蓝牙系统服务层:新增的独立蓝牙进程(位于 packages/apps/Bluetooth)作为系统级服务运行,负责封装蓝牙业务逻辑,通过 JNI 调用 HAL 层接口,取代了此前 BlueZ 依赖 DBUS 的通信方式。
蓝牙 HAL 接口层:Android 4.2 引入的关键抽象层,由核心规范 HAL 和应用规范 HAL(Profile HAL) 两部分组成。不同蓝牙芯片厂商只需按此接口规范实现适配层,即可快速完成移植,实现了上层逻辑与底层硬件的彻底解耦。
蓝牙协议栈核心:分为两大组件——BTA(蓝牙应用层) 负责设备管理、状态管理及各应用规范的高层逻辑;BTE(蓝牙嵌入式系统) 通过 HCI 与芯片交互,实现 L2CAP、SDP、RFCOMM、GATT 等通用协议,其内部的 GKI(统一内核接口) 便于厂商将协议栈快速移植到不同平台。
厂商扩展层:可添加自定义扩展,实现芯片特有的低功耗优化、私有协议等差异化功能。
蓝牙芯片硬件:负责射频收发、基带处理等物理层功能,通过 HCI 与 BTE 交互。
BSR 技术与 Android 4.3 生态扩展
在 2013 年 Google I/O 大会上,Google 宣布与苹果、微软、黑莓等厂商共同支持 Bluetooth Smart Ready(BSR) 和 Bluetooth Smart(BS) 技术:
| 类型 | 定位 | 典型设备 |
|---|---|---|
| BS (Bluetooth Smart) | 低功耗、小数据量的传感器端 | 心率手环、智能门锁、血糖仪 |
| BSR (Bluetooth Smart Ready) | 中心设备,汇聚 BS 设备数据 | 智能手机、平板、笔记本 |
BSR 和 BS 均基于蓝牙核心规范 4.0 及 GATT 规范构建。Android 4.3(MR2) 正式支持 BSR 技术,BS 开发者可便捷地将设备与 Android BSR 设备互联。
此外,蓝牙技术联盟(Bluetooth SIG)同步推出 Bluetooth Application Accelerator(蓝牙应用加速器),帮助开发者在 Android 4.3 上快速构建蓝牙应用,缩短产品研发周期。
从 BlueZ 到 BlueDroid 的演进,体现了 Android 在技术路线上的重要转向——从复用 Linux 社区方案走向自主可控的协议栈设计。通过 HAL 层解耦和架构简化,BlueDroid 解决了 Android 生态中长期存在的碎片化问题,降低了厂商适配成本。
但仍需注意,BlueDroid 发布初期对部分 Profile 的支持尚不完善,例如 AVRCP 仅支持 1.0 版本,未跟进 1.5。对于国内芯片及手机厂商,及早完成从 BlueZ 到 BlueDroid 的平滑迁移,将有助于在竞争激烈的市场中抢得先机。
展望未来,蓝牙凭借低功耗、高兼容性的优势,在可穿戴设备、智能家居、健康医疗、工业物联网等领域将扮演日益关键的角色,成为万物互联时代不可或缺的基础设施。
如果觉得文章对你有帮助,欢迎赞赏支持
