
Android 的音訊硬體抽象層 (HAL) 會將 android.media 中較高層級的音訊專屬架構 API 連結至基礎音訊驅動程式和硬體。本節提供實作說明和改善效能的提示。
Android 音訊架構定義了音訊功能的實作方式,並指向實作過程中涉及的相關原始碼。

圖 1. Android 音訊架構
- 應用程式架構
- 應用程式架構包含應用程式程式碼,該程式碼會使用 android.media API 與音訊硬體互動。在內部,此程式碼會呼叫相應的 JNI 黏著劑類別,以存取與音訊硬體互動的原生程式碼。
- JNI
- 與 android.media 相關聯的 JNI 程式碼會呼叫較低層級的原生程式碼,以存取音訊硬體。JNI 位於
frameworks/base/core/jni/
和frameworks/base/media/jni
。 - 原生架構
-
原生架構提供與 android.media 套件相等的原生功能,可呼叫 Binder IPC 代理程式,存取媒體伺服器的音訊專屬服務。原生架構程式碼位於
frameworks/av/media/libmedia
中。 - Binder IPC
-
Binder IPC 代理程式可協助處理序間通訊。代理程式位於
frameworks/av/media/libmedia
中,開頭為字母「I」。 - 媒體伺服器
-
媒體伺服器包含音訊服務,也就是與 HAL 實作項目互動的實際程式碼。媒體伺服器位於
frameworks/av/services/audioflinger
。 - HAL
-
HAL 會定義音訊服務呼叫的標準介面,您必須實作這項介面,音訊硬體才能正常運作。如需詳細資訊,請參閱音訊 HAL 介面,以及對應 HAL 版本目錄中
*.hal
檔案中的註解。 - 核心驅動程式
-
音訊驅動程式會與硬體和 HAL 實作互動。您可以使用 Advanced Linux Sound Architecture (ALSA)、Open Sound System (OSS) 或自訂驅動程式 (HAL 是驅動程式無關的)。
注意:如果您使用 ALSA,建議您將
external/tinyalsa
用於驅動程式的使用者部分,因為其授權相容 (標準使用者模式程式庫為 GPL 授權)。 - 以 OpenSL ES 為基礎的 Android 原生音訊 (未顯示)
- 這個 API 會在 Android NDK 中公開,且與 android.media 位於相同的架構層級。