
В Android по умолчанию используется стек Bluetooth, поддерживающий как классический Bluetooth, так и Bluetooth с низким энергопотреблением (BLE). Устройства Android могут создавать персональные сети с помощью Bluetooth, чтобы отправлять и получать данные с ближайших устройств Bluetooth.
В Android 4.3 и более поздних версий стек Bluetooth Android позволяет реализовать BLE. Чтобы использовать BLE API в полной мере, следуйте требованиям к интерфейсу "человек-компьютер" Bluetooth в Android. Устройства Android с подходящим чипсетом могут использовать либо классический Bluetooth, либо классический Bluetooth и BLE. BLE не обратно совместим с более старыми чипсетами Bluetooth.
В Android 8.0 стек Bluetooth полностью соответствует спецификации Bluetooth 5. Чтобы использовать функции Bluetooth 5, на устройстве должен быть чипсет, сертифицированный для Bluetooth 5.
Архитектура Android
Приложение Bluetooth взаимодействует с процессом Bluetooth через Binder. Процесс Bluetooth использует Java Native Interface (JNI) для связи со стеком Bluetooth и предоставляет разработчикам доступ к различным профилям Bluetooth. На диаграмме ниже показана общая структура стека Bluetooth:

Рисунок 1. Архитектура Bluetooth в Android.
- фреймворк приложения
- На уровне фреймворка приложения находится код приложения, который использует API
android.bluetoothдля взаимодействия с оборудованием Bluetooth. Внутренне этот код вызывает процесс Bluetooth через механизм межпроцессного взаимодействия Binder. - Приложение для подключения по Bluetooth
- Приложение Bluetooth, расположенное в
packages/modules/Bluetooth/android/app, упаковано как приложение Android и реализует профили Bluetooth на уровне фреймворка Android. Это приложение вызывает стек Bluetooth через JNI. - JNI
- Код JNI, связанный с
android.bluetooth, находится вpackages/modules/Bluetooth/android/app/jni. Код JNI вызывает стек Bluetooth при выполнении определенных операций, например при обнаружении устройств. - Стек Bluetooth
- Стек Bluetooth по умолчанию предоставляется в AOSP и находится в каталоге
packages/modules/Bluetooth/system. Стек реализует общий HAL Bluetooth и настраивает его с помощью расширений и изменений конфигурации. - реализация поставщика
- Устройства поставщиков взаимодействуют со стеком Bluetooth с помощью языка описания интерфейса HAL (HIDL).
HIDL
HIDL определяет интерфейс между стеком Bluetooth и реализацией поставщика. Чтобы создать файлы HIDL для Bluetooth, передайте файлы интерфейса Bluetooth в инструмент генерации HIDL. Файлы интерфейса находятся в каталоге hardware/interfaces/bluetooth.
Разработка стека Bluetooth
Стек Bluetooth в Android полностью соответствует требованиям. Список квалификаций можно найти на сайте Bluetooth SIG (требуется вход) по идентификатору QDID 169365.
Основной стек Bluetooth находится в packages/modules/Bluetooth.
Разработка ведется в AOSP, и мы приветствуем участие в ней.