
L'Hardware Abstraction Layer (HAL) audio di Android collega le API framework specifiche per l'audio di livello superiore in android.media al driver audio e all'hardware sottostanti. Questa sezione include istruzioni di implementazione e suggerimenti per migliorare le prestazioni.
L'architettura audio Android definisce come viene implementata la funzionalità audio e punta al codice sorgente pertinente coinvolto nell'implementazione.

Figura 1. Architettura audio Android
- Framework dell'applicazione
- Il framework dell'applicazione include il codice dell'app, che utilizza le API android.media per interagire con l'hardware audio. Internamente, questo codice chiama le classi di colla JNI corrispondenti per accedere al codice nativo che interagisce con l'hardware audio.
- JNI
- Il codice JNI associato ad android.media richiama il codice nativo di livello inferiore per accedere all'hardware audio. JNI si trova in
frameworks/base/core/jni/
eframeworks/base/media/jni
. - Framework nativo
- Il framework nativo fornisce un equivalente nativo al pacchetto android.media , chiamando i proxy IPC di Binder per accedere ai servizi specifici dell'audio del server multimediale. Il codice del framework nativo si trova in
frameworks/av/media/libmedia
. - Binder IPC
- I proxy Binder IPC facilitano la comunicazione oltre i confini del processo. I proxy si trovano in
frameworks/av/media/libmedia
e iniziano con la lettera "I". - Server multimediale
- Il server multimediale contiene servizi audio, che sono il codice effettivo che interagisce con le implementazioni di HAL. Il server multimediale si trova in
frameworks/av/services/audioflinger
. - HAL
- L'HAL definisce l'interfaccia standard in cui chiamano i servizi audio e che è necessario implementare affinché l'hardware audio funzioni correttamente. Le interfacce audio HAL si trovano in
hardware/libhardware/include/hardware
. Per i dettagli, vedere audio.h . - Driver del kernel
- Il driver audio interagisce con l'hardware e l'implementazione di HAL. Puoi usare Advanced Linux Sound Architecture (ALSA), Open Sound System (OSS) o un driver personalizzato (HAL è indipendente dal driver).
Nota : se usi ALSA, ti consigliamo
external/tinyalsa
per la parte utente del driver a causa della sua licenza compatibile (la libreria in modalità utente standard è concessa in licenza GPL). - Audio nativo Android basato su Open SL ES (non mostrato)
- Questa API è esposta come parte di Android NDK ed è allo stesso livello di architettura di android.media .