Android BLE 蓝牙开发:不就是调 API 吗?

88 阅读5分钟

“不就是调个 connectGatt() 吗?读写下特征值就完了?”

听起来没错,直到你真的做过 BLE 才知道——它远比你想象的复杂。

大家好,我是 Android 开发者 Vincent。

这几年,随着智能硬件、IoT、电子价签、手环、蓝牙秤的普及,BLE(Bluetooth Low Energy)开发几乎成了 Android 开发者的必修技能。

但也有不少人说:

“蓝牙开发?不就是调 API 吗?没什么技术含量。”

没错,表面上确实只是调几个接口

device.connectGatt(...)
gatt.readCharacteristic(...)
gatt.writeCharacteristic(...)

可真正的 BLE 工程化开发,要处理的远不止这些。
从连接不稳定到数据丢包,从多设备并发到系统兼容,每一个坑都足以让你熬夜怀疑人生

本文我们就来聊聊:
👉 BLE 开发到底难在哪?
👉 “调 API”之外,你还得会什么?


一、候选人背景(假设场景)

主角小王,3 年 Android 经验,主导公司智能门锁的蓝牙模块开发:

  • 能做扫描、连接、读写数据
  • 封装过简单 BLE SDK
  • 还做过 OTA 升级功能

目标:转做 BLE SDK 工程师,期望薪资 25K。


二、面试环节拆解

🔹 第一轮:BLE 连接机制

面试官:

Android BLE 从扫描到通信的流程讲一下?

小王:

BluetoothAdapter.startScan() 扫设备,拿到 ScanResult 后用 device.connectGatt() 建立连接,再发现服务、获取特征、读写数据。

面试官追问:

如果经常连接失败或卡在发现服务阶段怎么办?

小王:

重连几次?

😅

点评:
这正是很多 BLE 新手的通病。

BLE 连接失败原因成百上千:

  • 蓝牙权限未打开
  • 系统缓存问题(GattCache)
  • 上一次连接未断干净
  • Android 不同版本 Bug(8~11 特别多)
  • 手机蓝牙栈崩溃

优秀工程师会这样做:

  • 每次连接前主动断开旧连接并清理缓存
  • 设计连接状态机防止多线程竞争
  • 增加延时与重试机制
  • 区分系统/设备层错误码

🔹 第二轮:多设备并发与数据稳定性

面试官:

你试过同时连多个设备吗?

小王:

连过两个手环,不过有时候一个连上另一个就断了。

点评:
BLE 并发是 Android BLE 的“地狱模式”。
不同系统、不同芯片的并发能力差异极大。

👉 工程化处理思路:

  • 维护连接池(Connection Pool)
  • 建立通信队列串行化读写
  • 根据设备类型设置优先级
  • 分线程处理连接与回调

否则结果就是:

“一个连着,另一个永远在转圈。”


🔹 第三轮:数据通信与协议设计

面试官:

你们怎么收发数据的?

小王:

直接写特征值,设备端解析。丢包就重发。

点评:
BLE 通信的稳定性取决于协议设计:

BLE 每次最多传 20~244 字节(取决于 MTU)。
要做到大包分片、粘包合并、超时重试、CRC 校验

✅ 稳定通信框架应具备:

  • 分包发送与拼包接收
  • ACK/重发机制
  • 写入队列控制(WriteQueue)
  • 读写并发锁
  • 校验与加密机制

🔹 第四轮:BLE 工程化与兼容性

面试官:

你做过哪些 BLE 稳定性优化?

小王:

加了重连逻辑。

点评:
仅仅“重连”还远远不够。

工程化优化包括:

  1. 连接状态机 + 超时检测
  2. 扫描白名单与信号强度过滤
  3. 缓存清理机制(解决设备连接不上)
  4. 后台保活策略(Service + Foreground)
  5. 日志与异常监控(BLE Log 上报)
  6. 适配各厂系统差异(MIUI、华为、三星)

🔹 第五轮:BLE OTA 与安全

面试官:

做过 OTA 升级吗?

小王:

用 Nordic DFU 发包升级。

点评:
OTA 是 BLE 开发最能体现“功力”的环节。

涉及:

  • 分包传输、断点续传
  • 校验机制(CRC / MD5)
  • 超时与回滚策略
  • 加密安全校验
  • 固件签名验证

做不好就是“升个级、砖一片”。


三、面试总结

优势:

  • 能实现基本扫描、连接、通信
  • 对 BLE 有初步了解

不足:

  • 缺乏工程化与调试经验
  • 不懂兼容性和稳定性优化
  • 没有构建 SDK 级封装能力

结论:

25K 不是不可能,但要从“能跑”到“能商用”,
还差一个完整的 BLE 工程体系。


四、BLE 开发能力模型

能力方向关键内容
1. BLE 原理Central/Peripheral 模型、GATT、MTU、UUID、Characteristic
2. 通信协议设计分包、粘包、CRC、重发机制、超时策略
3. 工程化能力状态机、日志监控、异常恢复、SDK 封装
4. 兼容性与性能多设备并发、系统差异、低功耗与后台连接
5. 安全与 OTA加密验证、签名校验、断点续传、回滚保护

五、学习建议

✅ 1)别停在“能连上”层面

连接成功不代表 BLE 稳定;稳定才是 BLE 的灵魂。

✅ 2)重视工程化实践

日志、监控、重试、异常恢复,是 SDK 的基础。

✅ 3)理解协议,不盲目试错

懂原理才能避坑,比如 MTU、Notify、Write Type 的区别。

✅ 4)多设备多品牌实测

同样代码,小米可能断连,华为正常,三星直接 Crash。

✅ 5)阅读优秀框架源码

RxAndroidBleFastBleNordic DFU


六、结语

Android BLE 开发,看似只是几个 API 调用,
但真正的难点是——让它在各种设备上、稳定、高效地跑起来。

所以当有人再说:

“BLE?不就是调个 API 吗?”

你可以淡定地微笑:

“是的,调完之后的事……才刚刚开始。”


📚 关键词

BLEBluetooth Low EnergyAndroid 蓝牙开发蓝牙 SDKBLE 稳定性蓝牙连接优化BLE OTA蓝牙通信