
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
ます。 - ネイティブ フレームワーク
- ネイティブ フレームワークは、メディア サーバーのオーディオ固有のサービスにアクセスするために Binder IPC プロキシを呼び出して、 android.mediaパッケージに相当するネイティブを提供します。ネイティブ フレームワーク コードは、
frameworks/av/media/libmedia
ます。 - バインダーIPC
- Binder IPC プロキシは、プロセス境界を越えた通信を容易にします。プロキシは、
frameworks/av/media/libmedia
にあり、文字「I」で始まります。 - メディアサーバー
- メディア サーバーには、HAL 実装と対話する実際のコードであるオーディオ サービスが含まれています。メディア サーバーは、
frameworks/av/services/audioflinger
にあります。 - ハル
- HAL は、オーディオ サービスが呼び出す標準インターフェイスを定義し、オーディオ ハードウェアが正しく機能するために実装する必要があります。詳細については、オーディオ HAL インターフェイスと、対応する HAL バージョン ディレクトリの
*.hal
ファイル内のコメントを参照してください。 - カーネルドライバー
- オーディオ ドライバーは、ハードウェアおよび HAL 実装と対話します。 Advanced Linux Sound Architecture (ALSA)、Open Sound System (OSS)、またはカスタム ドライバー (HAL はドライバーに依存しません) を使用できます。
注: ALSA を使用する場合は、互換性のあるライセンス (標準のユーザー モード ライブラリは GPL ライセンス) のため、ドライバーのユーザー部分に
external/tinyalsa
をお勧めします。 - Open SL ES に基づく Android ネイティブ オーディオ(表示されていません)
- この API はAndroid NDKの一部として公開されており、 android.mediaと同じアーキテクチャ レベルにあります。