O Android é uma pilha de software com base em Linux de código aberto criada para diversos dispositivos e fatores de forma. A Figura 1 mostra os principais componentes da plataforma Android.
Figura 1. A pilha de software do Android.
Kernel do Linux
A fundação da plataforma Android é o kernel do linux. Por exemplo, o Android Runtime (ART, na sigla em inglês) confia no kernel do Linux para cobrir funcionalidades como encadeamento e gerenciamento de memória de baixo nível.
O uso de um kernel do Linux permite que o Android aproveite os recursos de segurança principais e que os fabricantes de dispositivos desenvolvam drivers de hardware para um kernel conhecido.
Camada de abstração de hardware (HAL)
A camada de abstração de hardware (HAL) fornece interfaces padrão que expõem as capacidades de hardware do dispositivo para a estrutura da API Java de maior nível. A HAL consiste em vários módulos de biblioteca, e cada um deles implementa uma interface para um tipo específico de componente de hardware, como o módulo de câmera ou Bluetooth. Quando uma API Framework faz uma chamada para acessar o hardware do dispositivo, o sistema Android carrega o módulo da biblioteca para esse componente de hardware.
Ambiente de execução do Android
Para dispositivos com Android versão 5.0 (API de nível 21) ou mais recente, cada app
executa o próprio processo com uma instância própria do Android Runtime
(ART). O ART foi criado para executar várias máquinas virtuais em dispositivos com pouca
memória, executando arquivos no formato
Dalvik Executable (DEX), um formato de bytecode projetado especificamente para
o Android e otimizado para um consumo mínimo de memória. Ferramentas de build, como
d8, compilam
fontes Java no bytecode DEX, que pode ser executado na plataforma Android.
Alguns dos recursos principais de ART são:
- Compilação "ahead-of-time" (AOT) e "just-in-time" (JIT)
- Coleta de lixo (GC) otimizada
- No Android 9 (nível 28 da API) e versões mais recentes, a conversão dos arquivos DEX de um pacote de apps em um código de máquina mais compacto
- Melhor compatibilidade de depuração, incluindo um criador de perfil de amostragem, exceções de diagnóstico detalhadas e geração de relatórios de erros, além da capacidade de definir pontos de controle para monitorar campos específicos.
Antes do Android versão 5.0 (API de nível 21), o Dalvik era o tempo de execução do Android. Se o seu app for executado bem no ART, ele também poderá funcionar no Dalvik, mas talvez não seja o contrário.
O Android também contém um conjunto das principais bibliotecas de tempo de execução que fornecem a maioria das funcionalidades da linguagem de programação Java, incluindo alguns recursos de linguagem Java 8 que a estrutura da API Java usa.
Bibliotecas C/C++ nativas
Muitos serviços e componentes essenciais do sistema Android, como ART e HAL, são criados com base em código nativo que exige bibliotecas nativas escritas em C e C++. A plataforma Android fornece APIs de framework Java para expor a funcionalidade de algumas dessas bibliotecas nativas para apps. Por exemplo, é possível acessar OpenGL ES pela API Java OpenGL da estrutura do Android para adicionar a capacidade de desenhar e manipular gráficos 2D e 3D no seu app.
Se estiver desenvolvendo um app que exija código C ou C++, você pode usar o Android NDK para acessar algumas das bibliotecas de plataforma nativa diretamente do seu código nativo.
Framework da API Java
O conjunto completo de recursos do SO Android está disponível pelas APIs programadas na linguagem Java. Essas APIs formam os blocos de programação que você precisa para criar apps Android simplificando a reutilização de componentes e serviços de sistema modulares e principais, incluindo:
- Um sistema de visualização avançado e extensível que pode ser usado para criar a IU de um app, incluindo listas, grades, caixas de texto, botões e até mesmo um navegador da Web incorporável.
- Um gerenciador de recursos, que fornece acesso a recursos sem código, como strings localizadas, gráficos e arquivos de layout
- Um gerenciador de notificações que permite que todos os apps mostrem alertas personalizados na barra de status
- Um gerenciador de atividades que gerencia o ciclo de vida dos apps e fornece uma backstack de navegação comum.
- Provedores de conteúdo que permitem que os apps acessem dados de outros apps, como o Contatos, ou compartilhem os próprios dados
Os desenvolvedores têm acesso completo às mesmas APIs Framework que os apps do sistema Android usam.
Apps do sistema
O Android vem com um conjunto de apps principais para e-mail, envio de SMS, agenda, navegador de internet, contatos etc. Os apps inclusos na plataforma não têm status especial entre os apps que o usuário opta por instalar. Portanto, um app de terceiros pode se tornar o navegador da Web, o app de envio de SMS ou até mesmo o teclado padrão do usuário. Algumas exceções se aplicam, como o app Configurações do sistema.
Os apps do sistema funcionam como apps para os usuários e para fornecer recursos importantes que os desenvolvedores podem acessar no próprio app. Por exemplo, se você quer que seu app envie mensagens SMS, não é necessário criar essa funcionalidade por conta própria. Em vez disso, você pode invocar qualquer app de SMS instalado para entregar uma mensagem ao destinatário especificado.