
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 代理促进跨进程边界的通信。代理位于
frameworks/av/media/libmedia
并以字母“I”开头。 - 媒体服务器
- 媒体服务器包含音频服务,它们是与您的 HAL 实现交互的实际代码。媒体服务器位于
frameworks/av/services/audioflinger
中。 - 哈尔
- HAL 定义了音频服务调用的标准接口,您必须实现该接口才能使您的音频硬件正常运行。更多详情请参考对应HAL版本目录下的
*.hal
文件中的音频HAL接口和注释。 - 内核驱动程序
- 音频驱动程序与您的硬件和 HAL 实现进行交互。您可以使用高级 Linux 声音架构 (ALSA)、开放声音系统 (OSS) 或自定义驱动程序(HAL 与驱动程序无关)。
注意:如果您使用 ALSA,我们建议将
external/tinyalsa
用于驱动程序的用户部分,因为它的许可兼容(标准用户模式库是 GPL 许可的)。 - 基于 Open SL ES 的 Android 原生音频(未显示)
- 此 API 作为Android NDK的一部分公开,与android.media处于同一架构级别。