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.
![A pilha de software do Android](https://developer.android.com/static/guide/platform/images/android-stack_2x.png?authuser=5&hl=pt)
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.