
Android proporciona una pila de Bluetooth predeterminada que admite Bluetooth clásico y Bluetooth de bajo consumo. Con Bluetooth, los dispositivos Android pueden crear redes de área personal para enviar y recibir datos con dispositivos Bluetooth cercanos.
En Android 4.3 y versiones posteriores, la pila de Bluetooth de Android proporciona la capacidad de implementar Bluetooth de bajo consumo (BLE). Para aprovechar al máximo las APIs de BLE, sigue los requisitos de HCI de Bluetooth para Android. Los dispositivos Android con un chipset calificado pueden implementar Bluetooth clásico o Bluetooth clásico y BLE. El BLE no es retrocompatible con los conjuntos de chips Bluetooth más antiguos.
En Android 8.0, la pila Bluetooth nativa está completamente calificada para Bluetooth 5. Para usar las funciones disponibles de Bluetooth 5, el dispositivo debe tener un chipset calificado para Bluetooth 5.
Arquitectura de Android
Una app de Bluetooth se comunica con el proceso de Bluetooth a través de Binder. El proceso de Bluetooth usa JNI para comunicarse con la pila de Bluetooth y les proporciona a los desarrolladores acceso a varios perfiles de Bluetooth. En este diagrama, se muestra la estructura general de la pila de Bluetooth:

- Framework de la app
- En el nivel del framework de la app, se encuentra el código de la app, que usa las APIs de android.bluetooth para interactuar con el hardware de Bluetooth. De forma interna, este código llama al proceso de Bluetooth a través del mecanismo de IPC de Binder.
- App de Bluetooth
-
La app de Bluetooth, que se encuentra en
packages/modules/Bluetooth/android/app
, se empaqueta como una app para Android y, además, implementa los perfiles de Bluetooth en la capa del framework de Android. Esta app llama a la pila de Bluetooth nativa a través de JNI. - JNI
-
El código JNI asociado con android.bluetooth se encuentra en
packages/modules/Bluetooth/android/app/jni
. El código de JNI llama a la pila de Bluetooth cuando se producen ciertas operaciones de Bluetooth, como cuando se descubren dispositivos. - Pila Bluetooth
-
La pila Bluetooth predeterminada se proporciona en AOSP y se encuentra en
packages/modules/Bluetooth/system
. La pila implementa el HAL genérico de Bluetooth y lo personaliza con extensiones y cambios de configuración. - Implementación del proveedor
- Los dispositivos del proveedor interactúan con la pila de Bluetooth mediante el lenguaje de diseño de interfaz de hardware (HIDL).
HIDL
HIDL define la interfaz entre la pila de Bluetooth y la implementación del proveedor. Para generar los archivos HIDL de Bluetooth, pasa los archivos de interfaz de Bluetooth a la herramienta de generación de HIDL. Los archivos de interfaz se encuentran en hardware/interfaces/bluetooth
.
Desarrollo de la pila de Bluetooth
La pila de Bluetooth de Android es una pila de Bluetooth completamente calificada. La lista de calificaciones se encuentra en el sitio web de Bluetooth SIG, en QDID 169365.
La pila principal de Bluetooth reside en
packages/modules/Bluetooth
. El desarrollo se realiza en AOSP, y se aceptan contribuciones.
Arquitectura de Android 7.x y versiones anteriores
Un servicio del sistema Bluetooth se comunica con la pila de Bluetooth a través de JNI y con las apps a través de IPC de Binder. El servicio del sistema les brinda a los desarrolladores acceso a varios perfiles de Bluetooth. En este diagrama, se muestra la estructura general de la pila de Bluetooth:

- Framework de la app
-
En el nivel del framework de la app, se encuentra el código de la app, que usa las APIs de
android.bluetooth
para interactuar con el hardware de Bluetooth. De forma interna, este código llama al proceso de Bluetooth a través del mecanismo de IPC de Binder. - Servicio de sistema Bluetooth
-
El servicio del sistema Bluetooth, ubicado en
packages/apps/Bluetooth
, se empaqueta como una app para Android y, luego, implementa el servicio y los perfiles de Bluetooth en la capa del framework de Android. Esta app llama a la capa HAL a través de JNI. - JNI
-
El código JNI asociado con
android.bluetooth
se encuentra en
packages/apps/Bluetooth/jni
. El código JNI llama a la capa de HAL y recibe devoluciones de llamadas de HAL cuando se producen ciertas operaciones de Bluetooth, como cuando se descubren dispositivos. - HAL
-
La capa de abstracción de hardware define la interfaz estándar a la que llaman las APIs de
android.bluetooth y el proceso de Bluetooth, y que debes implementar para que el hardware de Bluetooth
funcione correctamente. El archivo de encabezado del HAL de Bluetooth es
hardware/libhardware/include/hardware/bluetooth.h
. Además, revisa todos los archivoshardware/libhardware/include/hardware/bt_*.h
. - Pila Bluetooth
-
Se te proporciona la pila de Bluetooth predeterminada, que se encuentra en
system/bt
. La pila implementa el HAL genérico de Bluetooth y lo personaliza con extensiones y cambios de configuración. - Extensiones de proveedores
- Para agregar extensiones personalizadas y una capa de HCI para el seguimiento, puedes crear un módulo libbt-vendor y especificar estos componentes.
Implementa el HAL
El HAL de Bluetooth se encuentra en /hardware/libhardware/include/hardware/bluetooth.h
. El archivo bluetooth.h
contiene la interfaz básica de la pila de Bluetooth y debes implementar sus funciones.
Los archivos específicos del perfil se encuentran en el mismo directorio. Para obtener más información, consulta la referencia del archivo HAL.