
Die Audio-Hardware-Abstraktionsschicht (Hardware Abstraction Layer, HAL) von Android verbindet die Audio-Framework-APIs auf höherer Ebene in android.media mit dem zugrunde liegenden Audiotreiber und der Hardware. Dieser Abschnitt enthält Implementierungsanleitungen und Tipps zur Leistungssteigerung.
Die Android-Audioarchitektur definiert, wie Audiofunktionen implementiert werden, und verweist auf den relevanten Quellcode, der an der Implementierung beteiligt ist.

Abbildung 1: Android-Audioarchitektur
- Anwendungs-Framework
- Das Anwendungs-Framework enthält den App-Code, der die android.media-APIs verwendet, um mit der Audiohardware zu interagieren. Intern ruft dieser Code entsprechende JNI-Glue-Klassen auf, um auf den nativen Code zuzugreifen, der mit der Audiohardware interagiert.
- JNI
-
Der JNI-Code, der mit android.media verknüpft ist, ruft nativen Code auf niedrigerer Ebene auf, um auf Audiohardware zuzugreifen. JNI befindet sich in
frameworks/base/core/jni/
undframeworks/base/media/jni
. - Natives Framework
-
Das native Framework bietet ein natives Äquivalent zum Paket android.media. Es ruft Binder-IPC-Proxys auf, um auf die audiospezifischen Dienste des Mediaservers zuzugreifen.
Der native Framework-Code befindet sich in
frameworks/av/media/libmedia
. - Binder-IPC
-
Binder-IPC-Proxys erleichtern die Kommunikation über Prozessgrenzen hinweg. Proxys befinden sich in
frameworks/av/media/libmedia
und beginnen mit dem Buchstaben „I“. - Mediaserver
-
Der Media-Server enthält Audiodienste, also den eigentlichen Code, der mit Ihren HAL-Implementierungen interagiert. Der Mediaserver befindet sich unter
frameworks/av/services/audioflinger
. - HAL
-
Die HAL definiert die Standardschnittstelle, die von Audiodiensten aufgerufen wird und die Sie implementieren müssen, damit Ihre Audiohardware richtig funktioniert. Weitere Informationen finden Sie in der Audio-HAL-Schnittstelle und in den Kommentaren in den
*.hal
-Dateien des entsprechenden HAL-Versionsverzeichnisses. - Kernel-Treiber
-
Der Audio-Treiber interagiert mit Ihrer Hardware und HAL-Implementierung. Sie können ALSA (Advanced Linux Sound Architecture), OSS (Open Sound System) oder einen benutzerdefinierten Treiber verwenden (HAL ist treiberunabhängig).
Hinweis: Wenn Sie ALSA verwenden, empfehlen wir
external/tinyalsa
für den Nutzerteil des Treibers, da die Lizenz kompatibel ist (die Standardbibliothek im Nutzermodus ist GPL-lizenziert). - Systemeigenes Android-Audio basierend auf OpenSL ES (nicht dargestellt)
- Diese API ist Teil des Android NDK und befindet sich auf derselben Architekturstufe wie android.media.