Ontem, a próxima atualização do sistema operacional para dispositivos móveis do Google foi lançada. Uma das principais inovações do Android 10 foi o "Project Mainline". Vou tentar descobrir o que é, por que e como funciona.
Por muitos anos, o Google tenta resolver o problema de atualizações de segurança no Android. O Android está atualmente instalado em vários bilhões de dispositivos, mas a maioria dos fabricantes reluta em oferecer suporte a dispositivos após o lançamento. Isso leva ao fato de que existem muitos dispositivos em operação nos quais uma versão com vulnerabilidades conhecidas está instalada.
O primeiro grande passo para simplificar a atualização do Android foi o "Project Treble", que "dividiu" o Android em duas partes: dependente de hardware e independente. O que facilitou o lançamento de atualizações para novas versões do Android. O próximo grande passo foi o Projeto Mainline. Permite atualizar componentes individuais do sistema operacional sem atualizar o sistema inteiro, semelhante à atualização de aplicativos.
Por que isso é necessário?
Na arquitetura Android, o sistema operacional (geralmente chamado de firmware) é totalmente separado dos aplicativos e dados do usuário. Ele está localizado em uma seção separada da memória flash, é somente leitura e nas últimas versões do Android é assinado digitalmente para controle de integridade. Para aplicativos Android que fazem parte do sistema operacional, é possível atualizar com o posicionamento de novas versões de aplicativos na seção de memória do usuário. A atualização de outras partes do sistema operacional (serviços, bibliotecas etc.), por exemplo, usando o gerenciador de pacotes, como nas distribuições Linux, era impossível. Para essas correções, o fabricante foi forçado a lançar uma atualização de todo o sistema. Ao mesmo tempo, ao usar o Google Mobile Services (a grande maioria dos dispositivos os utiliza), cada atualização requer certificação do Google. E “Project Mainline” resolve esse problema, agora os componentes do sistema podem ser atualizados individualmente, de forma semelhante aos aplicativos Android. Além das atualizações de segurança, também simplifica a atualização das configurações e dos dados do sistema, como fusos horários (tzdata).
Como isso funciona
O núcleo do Project Mainline é o novo contêiner para aplicativos do sistema APEX (abreviação de Android Pony EXpress).
No Android 10, o Google identificou 13 pacotes APEX no sistema que podem ser atualizados independentemente:
- Segurança: Codecs de mídia, Componentes do Media Framework, Resolvedor de DNS, Conscrito
- Privacidade: UI de documentos, Controlador de permissão, ExtServices
- Consistência: dados de fuso horário, ANGLE (participação dos desenvolvedores), metadados do módulo, componentes de rede, logon no portal cativo, configuração de permissão de rede
Os pacotes APEX podem ser instalados de maneira semelhante aos APKs usando o "instalador de pacotes", adb ou Google Play.
Apex
O arquivo APEX é semelhante ao usado para aplicativos APK do Andoird.
APEX é um arquivo zip contendo 4 arquivos principais:
- apex_manifest.json - contém o nome do pacote e sua versão;
- AndroidManifest.xml - metadados do pacote (semelhante ao APK);
- apex_payload.img - imagem do sistema de arquivos ext4;
- apex_pubkey - chave pública para verificar a assinatura da imagem.
O serviço do sistema gerenciador APEX (apexd) funciona com pacotes APEX.
Gerente Apex
- O instalador do pacote, tendo determinado que é um pacote APEX, passa-o para o gerenciador APEX.
- O gerente do APEX verifica o pacote e sua versão.
- Se as verificações passarem, ele descompacta na seção do usuário da memória, atualiza o registro em seu banco de dados e reinicia os dispositivos.
- Quando o APEX é inicializado, o gerenciador verifica todos os pacotes do banco de dados, cria um dispositivo de loop para a imagem ext4 e a monta no caminho / apex / name @ ver.
Dentro de uma imagem de um pacote APEX, pode haver:
- arquivos executáveis
- bibliotecas compartilhadas (.so)
- Bibliotecas JAR,
- arquivos de dados
- arquivos de configuração.
Pacote APEX de assinatura
O pacote APEX é assinado duas vezes, com duas chaves diferentes. A imagem ext4 é assinada com uma chave (o dm-verity é usado, como na inicialização do Android Verified), o pacote APEX (arquivo zip) é assinado com a segunda chave, semelhante ao pacote APK.
Kernel Linux
O APEX usa vários mecanismos do kernel do Linux, como um dispositivo de loop, DM-verity.
O APEX é suportado no kernel versão 4.4 e superior. Para dispositivos em versões mais antigas do kernel, apenas o trabalho no modo "plano", que não suporta atualização, é suportado.
Referências:
android.googlesource.com/platform/system/apex/+/refs/heads/master/docs/README.mdandroid-developers.googleblog.com/2019/05/fresher-os-with-projects-treble-and-mainline.html