
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
。 - 繫結器 IPC
-
Binder IPC Proxy 可促進跨程序界線的通訊。Proxy 位於
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 授權)。 - 以 Open SL ES 為基礎的 Android 原生音訊 (未顯示)
- 這個 API 會以 Android NDK 的一部分公開, 與 android.media 位於相同的架構層級。