A arquitetura do sistema Android contém os seguintes componentes:
- Estrutura do aplicativo . A estrutura do aplicativo é usada com mais frequência pelos desenvolvedores de aplicativos. Como desenvolvedor de hardware, você deve estar ciente das APIs do desenvolvedor, pois muitas mapeiam diretamente para as interfaces HAL subjacentes e podem fornecer informações úteis sobre a implementação de drivers.
- Aglutinante IPC . O mecanismo Binder Inter-Process Communication (IPC) permite que a estrutura do aplicativo cruze os limites do processo e chame o código de serviços do sistema Android. Isso permite que as APIs de estrutura de alto nível interajam com os serviços do sistema Android. No nível da estrutura do aplicativo, essa comunicação é ocultada do desenvolvedor e as coisas parecem "simplesmente funcionar".
- Serviços do sistema . Os serviços do sistema são componentes modulares e focados, como Gerenciador de Janelas, Serviço de Pesquisa ou Gerenciador de Notificações. A funcionalidade exposta pelas APIs da estrutura do aplicativo se comunica com os serviços do sistema para acessar o hardware subjacente. O Android inclui dois grupos de serviços: sistema (como Window Manager e Notification Manager) e mídia (serviços envolvidos na reprodução e gravação de mídia).
- Camada de abstração de hardware (HAL) . Uma HAL define uma interface padrão para os fornecedores de hardware implementarem, o que permite que o Android seja agnóstico sobre implementações de driver de nível inferior. O uso de um HAL permite implementar funcionalidades sem afetar ou modificar o sistema de nível superior. As implementações de HAL são empacotadas em módulos e carregadas pelo sistema Android no momento apropriado. Para obter detalhes, consulte Camada de abstração de hardware (HAL) .
- Núcleo Linux . O desenvolvimento de seus drivers de dispositivo é semelhante ao desenvolvimento de um driver de dispositivo Linux típico. O Android usa uma versão do kernel Linux com algumas adições especiais, como Low Memory Killer (um sistema de gerenciamento de memória que é mais agressivo na preservação de memória), wake locks (um serviço do sistema
PowerManager
), o driver Binder IPC e outros recursos importantes para uma plataforma móvel embarcada. Essas adições são principalmente para a funcionalidade do sistema e não afetam o desenvolvimento do driver. Você pode usar qualquer versão do kernel desde que suporte os recursos necessários (como o driver do binder). No entanto, recomendamos usar a versão mais recente do kernel do Android. Para obter detalhes, consulte Construindo Kernels .
Linguagem de definição de interface HAL (AIDL/HIDL)
O Android 8.0 re-arquitetou a estrutura do sistema operacional Android (em um projeto conhecido como Treble ) para tornar mais fácil, rápido e barato para os fabricantes atualizar os dispositivos para uma nova versão do Android. Nesta nova arquitetura, a linguagem de definição de interface HAL (HIDL, pronunciado "hide-l") especifica a interface entre uma HAL e seus usuários, permitindo que a estrutura do Android seja substituída sem reconstruir as HALs. No Android 10, os recursos HIDL foram incorporados ao AIDL. Desde então, o HIDL está obsoleto e é usado apenas por subsistemas que ainda não foram convertidos para AIDL.
O Treble separa a implementação do fornecedor (software de nível inferior específico do dispositivo escrito por fabricantes de silício) da estrutura do sistema operacional Android por meio de uma nova interface do fornecedor. Os fornecedores ou fabricantes de SOC criam HALs uma vez e os colocam em uma partição /vendor
no dispositivo; a estrutura, em sua própria partição, pode ser substituída por uma atualização over-the-air (OTA) sem recompilar as HALs.
A diferença entre a arquitetura legada do Android e a atual arquitetura baseada em IDL está no uso da interface do fornecedor:
- No Android 7.xe anteriores, não existe uma interface formal de fornecedor, portanto, os fabricantes de dispositivos devem atualizar grandes partes do código do Android para mover um dispositivo para uma versão mais recente do Android:
Figura 2. Ambiente de atualização do Android legado - No Android 8.0 e superior, uma nova interface de fornecedor estável fornece acesso às partes específicas de hardware do Android, para que os fabricantes de dispositivos possam fornecer novas versões do Android simplesmente atualizando a estrutura do sistema operacional Android, sem a necessidade de trabalho adicional dos fabricantes de silício:
Figura 3. Ambiente de atualização atual do Android
Todos os novos dispositivos lançados com Android 8.0 e superior podem aproveitar a nova arquitetura. Para garantir a compatibilidade futura das implementações do fornecedor, a interface do fornecedor é validada pelo Vendor Test Suite (VTS) , que é análogo ao Compatibility Test Suite (CTS) . Você pode usar o VTS para automatizar o teste do kernel HAL e do SO em arquiteturas Android legadas e atuais.
Recursos de arquitetura
Para obter detalhes sobre a arquitetura do Android, consulte as seguintes seções:
- Tipos de HAL . Descreve HALs encadernados, passthrough, Same-Process (SP) e herdados.
- AIDL . Documentação sobre AIDL, seja usado de forma geral ou como uma interface HAL.
- HIDL (Geral) . Contém informações gerais sobre a interface entre um HAL e seus usuários.
- HIDL (C++) . Contém detalhes para criar implementações C++ de interfaces HIDL.
- HIDL (Java) . Contém detalhes sobre o frontend Java para interfaces HIDL.
- ConfigStore HAL . Descreve as APIs para acessar itens de configuração somente leitura usados para configurar a estrutura do Android.
- Sobreposições de árvore de dispositivos . Fornece detalhes sobre o uso de sobreposições de árvore de dispositivos (DTOs) no Android.
- Kit de desenvolvimento nativo do fornecedor (VNDK) . Descreve o conjunto de bibliotecas exclusivas de fornecedores para implementar HALs de fornecedores.
- Objeto de interface do fornecedor (VINTF) . Descreve os objetos que agregam informações relevantes sobre um dispositivo e disponibilizam essas informações por meio de uma API consultável.
- SELinux para Android 8.0 . Detalhes das alterações e personalizações do SELinux.
Além dos recursos neste site, membros da equipe do Treble publicaram Treble: Fast Software Updates by Creation an Equilibrium in an Active Software Ecosystem of Globally Distributed Stakeholders . O artigo é gratuito para membros da ACM e não membros podem adquirir ou ler o resumo.