
Уровень аппаратной абстракции звука (HAL) в Android связывает высокоуровневые API-интерфейсы, специфичные для аудио, в android.media с базовым аудиодрайвером и оборудованием. В этом разделе приведены инструкции по реализации и советы по повышению производительности.
Архитектура аудио в Android определяет способ реализации аудиофункциональности и указывает на соответствующий исходный код, участвующий в реализации.

Рисунок 1. Аудиоархитектура Android
- Прикладная платформа
- В состав фреймворка приложения входит код приложения, который использует API android.media для взаимодействия с аудиооборудованием. Внутри этот код вызывает соответствующие классы JNI для доступа к нативному коду, взаимодействующему с аудиооборудованием.
- JNI
- Код JNI, связанный с android.media, вызывает низкоуровневый нативный код для доступа к аудиооборудованию. JNI находится в
frameworks/base/core/jni/иframeworks/base/media/jni. - Нативная структура
- Нативный фреймворк предоставляет нативный эквивалент пакета android.media , вызывая IPC-прокси Binder для доступа к аудиосервисам медиасервера. Код нативного фреймворка находится в
frameworks/av/media/libmedia. - Binder 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, мы рекомендуем использовать
external/tinyalsaдля пользовательской части драйвера из-за совместимой лицензии (стандартная библиотека пользовательского режима распространяется под лицензией GPL). - Встроенная аудиосистема Android на основе OpenSL ES (не показана)
- Этот API предоставляется в составе Android NDK и находится на том же архитектурном уровне, что и android.media .