Android
Linux por baixo, Google por cima
O Android usa o kernel Linux — mas fortemente modificado para o contexto mobile (gestão agressiva de energia, IPC otimizado via Binder, drivers de hardware específicos de celular). Sobre esse kernel, o Google construiu uma pilha própria, sem usar as bibliotecas GNU tradicionais do Linux desktop:
- Bionic: a libc (biblioteca C padrão) própria do Android, mais leve que a
glibcusada no Linux desktop — otimizada para o espaço de armazenamento e memória de um celular. - ART (Android Runtime): motor que executa o código dos apps. Desde o Android 5.0, compila o bytecode do app para código de máquina nativo na instalação (AOT — Ahead-Of-Time), substituindo o antigo Dalvik, que interpretava/compilava em tempo de execução (JIT).
- HAL (Hardware Abstraction Layer): camada padronizada que permite ao mesmo Android rodar em milhares de modelos de aparelhos diferentes — cada fabricante implementa a HAL para sua câmera, sensor, modem específicos, sem que o framework Android precise saber os detalhes.
AOSP vs. Google Mobile Services
Um ponto frequentemente confuso: existem duas partes distintas.
| Camada | Licença | Conteúdo |
|---|---|---|
| AOSP (Android Open Source Project) | Aberta (Apache 2.0) | Kernel, framework, apps básicos — qualquer fabricante pode usar de graça e modificar |
| GMS (Google Mobile Services) | Proprietária, licenciada pelo Google | Play Store, Google Play Services, Gmail, Maps — exige certificação e acordo comercial com o Google |
É por isso que existem "Androids" sem nenhum app do Google (ex.: alguns aparelhos vendidos na China, ou o Amazon Fire OS) — eles usam o AOSP puro com uma loja de apps própria no lugar da Play Store.
Sandbox: cada app é um usuário Linux diferente
O Android leva o modelo de permissões UNIX ao extremo: cada app instalado recebe seu próprio UID (user ID) do Linux, como se fosse um usuário distinto no sistema. Isso significa que, por padrão, o app A não consegue ler os arquivos do app B — a mesma proteção que isola dois usuários humanos em um Linux multiusuário tradicional isola dois aplicativos no seu celular.
Sistema Linux tradicional: Android:
usuário "alice" → UID 1001 app com.banco.app → UID 10087
usuário "bob" → UID 1002 app com.jogo.puzzle → UID 10088
(não podem ler (não podem ler
arquivos um do outro) dados um do outro)
Além disso, permissões sensíveis (câmera, localização, contatos) exigem autorização explícita do usuário em tempo de execução desde o Android 6.0.
Empacotamento: o arquivo APK
Um app Android é distribuído como um APK (Android Package) — na prática, um arquivo ZIP contendo:
classes.dex— o bytecode compilado (Dalvik/ART bytecode, gerado a partir de Kotlin/Java)AndroidManifest.xml— declara permissões, componentes e requisitos do appres/— imagens, layouts, strings traduzidas- Bibliotecas nativas
.so(se o app usa código C/C++ via NDK)
A Play Store hoje distribui o formato AAB (Android App Bundle), que gera APKs otimizados por dispositivo (só baixa os recursos e bibliotecas nativas compatíveis com aquele aparelho específico).
Fragmentação
Diferente do iOS (poucos modelos, atualizações simultâneas), o Android roda em milhares de combinações de fabricante + modelo + versão do sistema, cada um com sua própria camada de personalização (Samsung One UI, Xiaomi HyperOS) sobre o AOSP. Isso torna o teste de compatibilidade de apps mais trabalhoso do que no ecossistema Apple — um trade-off direto da abertura da plataforma.
Próximo: iOS
➡️ iOS →