
La capa de abstracción de hardware (HAL) de audio de Android conecta las APIs de framework específicas de audio de nivel superior en android.media al controlador y hardware de audio 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 hace referencia al código fuente relevante involucrado en la implementación.

Figura 1: Arquitectura de audio de Android
- Framework 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. De forma interna, este código llama a las clases de unión 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 al 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 multimedia.
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 multimedia contiene servicios de audio, que son el código real que interactúa con tus implementaciones de HAL. El servidor de contenido multimedia 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 información, consulta la interfaz de la HAL de audio y los comentarios en los archivos
*.hal
del directorio de la versión de HAL correspondiente. - Controlador de 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), Open Sound System (OSS) o un controlador personalizado (HAL es independiente 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 Open SL ES (no se muestra)
- Esta API se expone como parte del NDK de Android y está en el mismo nivel de arquitectura que android.media.