
O Hardware Abstraction Layer (HAL) do Android conecta as APIs de estrutura de áudio específicas de nível superior em android.media ao driver de áudio e hardware subjacentes. Esta seção inclui instruções de implementação e dicas para melhorar o desempenho.
A arquitetura de áudio do Android define como a funcionalidade de áudio é implementada e aponta para o código-fonte relevante envolvido na implementação.

Figura 1. Arquitetura de áudio Android
- Framework de aplicação
- A estrutura do aplicativo inclui o código do aplicativo, que usa as APIs android.media para interagir com o hardware de áudio. Internamente, esse código chama as classes de cola JNI correspondentes para acessar o código nativo que interage com o hardware de áudio.
- JNI
- O código JNI associado ao android.media chama o código nativo de nível inferior para acessar o hardware de áudio. JNI está localizado em
frameworks/base/core/jni/
eframeworks/base/media/jni
. - Estrutura nativa
- A estrutura nativa fornece um equivalente nativo ao pacote android.media , chamando proxies Binder IPC para acessar os serviços específicos de áudio do servidor de mídia. O código do framework nativo está localizado em
frameworks/av/media/libmedia
. - Binder IPC
- Os proxies Binder IPC facilitam a comunicação sobre os limites do processo. Os proxies estão localizados em
frameworks/av/media/libmedia
e começam com a letra "I". - Servidor de mídia
- O servidor de mídia contém serviços de áudio, que são o código real que interage com suas implementações HAL. O servidor de mídia está localizado em
frameworks/av/services/audioflinger
. - HAL
- O HAL define a interface padrão para a qual os serviços de áudio chamam e que você deve implementar para que seu hardware de áudio funcione corretamente. Para obter mais detalhes, consulte a interface de áudio HAL e comentários nos arquivos
*.hal
do diretório de versão HAL correspondente. - Driver de kernel
- O driver de áudio interage com o hardware e a implementação HAL. Você pode usar Advanced Linux Sound Architecture (ALSA), Open Sound System (OSS) ou um driver personalizado (HAL é independente de driver).
Nota : Se você usar ALSA, recomendamos
external/tinyalsa
para a parte do usuário do driver por causa de seu licenciamento compatível (a biblioteca de modo de usuário padrão é licenciada pela GPL). - Áudio nativo Android baseado em Open SL ES (não mostrado)
- Essa API é exposta como parte do Android NDK e está no mesmo nível de arquitetura do android.media .