
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 实现交互。您可以使用高级 Linux 声音架构 (ALSA)、开放声音系统 (OSS) 或自定义驱动程序(HAL 与驱动程序无关)。
注意:如果您使用 ALSA,我们建议使用
external/tinyalsa
作为驱动程序的用户部分,因为它具有兼容的许可(标准用户模式库是 GPL 许可的)。 - 基于 Open SL ES 的 Android 原生音频(未显示)
- 此 API 作为 Android NDK 的一部分公开,并且与 android.media 处于相同的架构级别。