
Die Audio-Hardware-Abstraktionsschicht (HAL) von Android verbindet die höherrangigen, audiospezifischen Framework-APIs in android.media mit dem zugrunde liegenden Audiotreiber und der zugrunde liegenden 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
- Anwendungsframework
- Das Anwendungs-Framework enthält den App-Code, der die android.media APIs zur Interaktion mit der Audiohardware verwendet. Intern ruft dieser Code entsprechende JNI-Bindungsklassen 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 die 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 und 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 Mediaserver enthält Audiodienste, also den 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 ordnungsgemäß 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 Audiotreiber interagiert mit Ihrer Hardware und HAL-Implementierung. Sie können Advanced Linux Sound Architecture (ALSA), Open Sound System (OSS) oder einen benutzerdefinierten Treiber verwenden (HAL ist treiberunabhängig).
Hinweis: Wenn Sie ALSA verwenden, empfehlen wir
external/tinyalsa
für den Nutzerbereich des Treibers aufgrund der kompatiblen Lizenzierung (die Standard-User-Mode-Bibliothek ist GPL-lizenziert). - Natives Android-Audio basierend auf Open SL ES (nicht dargestellt)
- Diese API wird als Teil des Android NDK freigegeben und befindet sich auf derselben Architekturebene wie android.media.