A Linguagem de definição de interface do Android (AIDL) é uma ferramenta que permite que os usuários
a abstração da IPC. Dada uma interface (especificada em um arquivo
.aidl
), vários sistemas de build usam o binário aidl
para criar vinculações C++ ou Java
para que essa interface possa ser usada em vários processos, independentemente do
ambiente de execução ou do número de bits.
O AIDL pode ser usado entre qualquer processo no Android: entre componentes da plataforma ou entre apps. No entanto, ela nunca é usada como uma API para apps. A AIDL pode ser usada para implementar uma API do SDK na plataforma, por exemplo, mas a superfície da API do SDK nunca contém APIs AIDL diretamente. Para acessar a documentação sobre como usar a AIDL diretamente entre apps, consulte as Desenvolvedores Android Documentação. Quando a AIDL é usada entre componentes da plataforma que são atualizados separadamente, como APEXes (a partir do Android 10) ou HALs (a partir do Android 11), o sistema de controle de versão conhecido como AIDL estável precisa ser usado.
Exemplo
Confira um exemplo de interface AIDL:
package my.package;
import my.package.Baz; // defined elsewhere
interface IFoo {
void doFoo(Baz baz);
}
Um processo de servidor registra uma interface e atende chamadas para ela, e um cliente faz chamadas para essas interfaces. Em muitos casos, um processo atua como cliente e servidor, já que pode referenciar várias interfaces. Para mais detalhes sobre a linguagem AIDL, consulte Linguagem AIDL. Para mais detalhes sobre os diversos tempos de execução disponíveis para usar essas interfaces, consulte Back-ends AIDL. Esse tipo de classe são exatamente como uma declaração de classe em um determinado idioma, mas o trabalho entre processos.
Como funciona
A AIDL usa o driver do kernel de vinculação para fazer chamadas. Quando você faz uma chamada, um identificador de método e todos os objetos são empacotados em um buffer e copiados para um processo remoto em que uma linha de execução de vinculação aguarda para ler os dados. Depois que um fichário recebe dados de uma transação, ela procura um objeto stub nativo no processo local, e essa classe descompacta os dados e faz uma chamada objeto de interface local. Esse objeto de interface local é o que um processo do servidor cria e registra. Quando as chamadas são feitas no mesmo processo back-end, não existem objetos de proxy e, portanto, as chamadas são diretas sem nenhum para empacotar ou desembalar.
Interagir com os serviços no dispositivo
O Android vem com alguns comandos para permitir a interação com os serviços no dispositivo. Tente:
adb shell dumpsys --help # listing and dumping services
adb shell service --help # sending commands to services for testing