
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 패키지와 동일한 기본 기능을 제공하며, 바인더 IPC 프록시를 호출하여 미디어 서버의 오디오 관련 서비스에 액세스합니다. 기본 프레임워크 코드는
frameworks/av/media/libmedia
에 있습니다. - 바인더 IPC
- 바인더 IPC 프록시는 프로세스 경계를 통한 통신을 용이하게 합니다. 프록시는
frameworks/av/media/libmedia
에 있으며 문자 "I"로 시작합니다. - 미디어 서버
- 미디어 서버에는 HAL 구현과 상호작용하는 실제 코드인 오디오 서비스가 포함되어 있습니다. 미디어 서버는
frameworks/av/services/audioflinger
에 있습니다. - 할
- HAL은 오디오 서비스가 호출하고 오디오 하드웨어가 올바르게 작동하기 위해 구현해야 하는 표준 인터페이스를 정의합니다. 자세한 내용은 해당 HAL 버전 디렉토리의
*.hal
파일에 있는 오디오 HAL 인터페이스 및 주석을 참조하십시오. - 커널 드라이버
- 오디오 드라이버는 하드웨어 및 HAL 구현과 상호 작용합니다. ALSA(Advanced Linux Sound Architecture), OSS(Open Sound System) 또는 사용자 지정 드라이버(HAL은 드라이버에 구애받지 않음)를 사용할 수 있습니다.
참고 : ALSA를 사용하는 경우 호환되는 라이선스(표준 사용자 모드 라이브러리는 GPL 라이선스) 때문에 드라이버의 사용자 부분에 대해
external/tinyalsa
를 권장합니다. - Open SL ES 기반 Android 네이티브 오디오 (표시되지 않음)
- 이 API는 Android NDK 의 일부로 노출되며 android.media 와 동일한 아키텍처 수준에 있습니다.