
Die Audio-Hardware-Abstraction-Schicht (HAL) von Android verbindet die übergeordneten, audio-spezifischen Framework-APIs in android.media mit dem zugrunde liegenden Audiotreiber und der zugrunde liegenden Hardware. Dieser Abschnitt enthält Implementierungsanweisungen und Tipps zur Verbesserung der Leistung.
Die Android-Audioarchitektur definiert, wie die Audiofunktionalität implementiert wird, und verweist auf den relevanten Quellcode, der an der Implementierung beteiligt ist.

Abbildung 1. Android-Audioarchitektur
- Anwendungsrahmen
- Das Anwendungsframework enthält den App-Code, der die android.media- APIs verwendet, um mit Audio-Hardware zu interagieren. Intern ruft dieser Code entsprechende JNI-Kleberklassen auf, um auf den nativen Code zuzugreifen, der mit Audio-Hardware interagiert.
- JNI
- Der mit android.media verknüpfte JNI-Code ruft nativen Code niedrigerer Ebene auf, um auf Audio-Hardware 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 audio-spezifischen Dienste des Medienservers zuzugreifen. Der native Framework-Code befindet sich in
frameworks/av/media/libmedia
. - Binder IPC
- Binder IPC-Proxys erleichtern die Kommunikation über Prozessgrenzen hinweg. Proxies befinden sich in
frameworks/av/media/libmedia
und beginnen mit dem Buchstaben "I". - Medienserver
- Der Medienserver enthält Audiodienste, bei denen es sich um den tatsächlichen Code handelt, der mit Ihren HAL-Implementierungen interagiert. Der Medienserver befindet sich in
frameworks/av/services/audioflinger
. - Hal
- Die HAL definiert die Standardschnittstelle, über die Audiodienste aufrufen und die Sie implementieren müssen, damit Ihre Audiohardware ordnungsgemäß funktioniert. Weitere Informationen finden Sie in der Audio-HAL-Oberfläche 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 aufgrund der kompatiblen Lizenzierung
external/tinyalsa
für den Benutzerteil des Treibers (die Standardbibliothek für den Benutzermodus ist GPL-lizenziert). - Natives Android-Audio basierend auf Open SL ES (nicht gezeigt)
- Diese API wird als Teil von Android NDK verfügbar gemacht und befindet sich auf derselben Architekturstufe wie android.media .