
La capa de abstracción de hardware (HAL) de audio de Android conecta las APIs del framework de nivel superior específicas del audio en android.media con el controlador de audio y el hardware subyacentes. En esta sección, se incluyen instrucciones de implementación y sugerencias para mejorar el rendimiento.
La arquitectura de audio de Android define cómo se implementa la funcionalidad de audio y apunta al código fuente pertinente involucrado en la implementación.

Figura 1: Arquitectura de audio de Android
- Marco de trabajo de la aplicación
- El framework de la aplicación incluye el código de la app, que usa las APIs de android.media para interactuar con el hardware de audio. Internamente, este código llama a las clases de vinculación de JNI correspondientes para acceder al código nativo que interactúa con el hardware de audio.
- JNI
-
El código JNI asociado con android.media llama a código nativo de nivel inferior para acceder al hardware de audio. JNI se encuentra en
frameworks/base/core/jni/
yframeworks/base/media/jni
. - Framework nativo
-
El framework nativo proporciona un equivalente nativo al paquete android.media, que llama a los proxies de IPC de Binder para acceder a los servicios específicos de audio del servidor de medios.
El código del framework nativo se encuentra en
frameworks/av/media/libmedia
. - IPC de Binder
-
Los proxies de IPC de Binder facilitan la comunicación a través de los límites del proceso. Los proxies se encuentran en
frameworks/av/media/libmedia
y comienzan con la letra "I". - Servidor multimedia
-
El servidor de medios contiene servicios de audio, que son el código real que
interactúa con tus implementaciones de HAL. El servidor de medios se encuentra en
frameworks/av/services/audioflinger
. - HAL
-
El HAL define la interfaz estándar a la que llaman los servicios de audio y que debes implementar para que el hardware de audio funcione correctamente. Para obtener más detalles, consulta la interfaz de la HAL de audio y los comentarios en los archivos
*.hal
del directorio de la versión de la HAL correspondiente. - Controlador del kernel
-
El controlador de audio interactúa con tu hardware y la implementación de HAL. Puedes usar la Arquitectura Avanzada para el Sonido en Linux (ALSA), el Open Sound System (OSS) o un controlador personalizado (el HAL no depende del controlador).
Nota: Si usas ALSA, te recomendamos
external/tinyalsa
para la parte del usuario del controlador debido a su licencia compatible (la biblioteca estándar en modo de usuario tiene licencia GPL). - Audio nativo de Android basado en OpenSL ES (no se muestra)
- Esta API se expone como parte del NDK de Android y se encuentra en el mismo nivel de arquitectura que android.media.