Uma imagem genérica do sistema (GSI) é uma imagem do sistema com configurações ajustadas para dispositivos Android. É considerada uma implementação Android pura com código Android Open Source Project (AOSP) não modificado que qualquer dispositivo Android com Android 9 ou superior pode executar com sucesso.
Os GSIs são usados para executar testes VTS e CTS-on-GSI. A imagem do sistema de um dispositivo Android é substituída por um GSI e testado com o Vendor Test Suite (VTS) e o Compatibility Test Suite (CTS) para garantir que o dispositivo implemente as interfaces do fornecedor corretamente com a versão mais recente do Android.
Para começar a usar GSIs, revise as seções a seguir para obter detalhes sobre configurações de GSI (e variações permitidas) e tipos . Quando estiver pronto para usar um GSI, baixe e crie o GSI para o seu destino de dispositivo e, em seguida , atualize o GSI para um dispositivo Android.
Configuração e variações de GSI
O Android GSI atual tem a seguinte configuração:
- Agudos. O GSI inclui suporte total para as alterações arquitetônicas baseadas em AIDL/HIDL (também conhecidas como Treble ), incluindo suporte para interfaces AIDL e interfaces HIDL . Você pode usar o GSI em qualquer dispositivo Android que use interfaces de fornecedores AIDL/HIDL. (Para obter mais detalhes, consulte Recursos de arquitetura .)
- Sistema de arquivo. O GSI usa o sistema de arquivos ext4.
O Android GSI atual inclui as seguintes variações principais:
- Arquitetura da CPU. Suporte para diferentes instruções de CPU (ARM, x86, etc.) e bits de CPU (32 bits ou 64 bits).
Metas GSI para testes de conformidade com Treble
O GSI usado para testes de conformidade é determinado pela versão do Android com a qual o dispositivo é iniciado.
Tipo de dispositivo | Construir alvo |
---|---|
Dispositivos lançados com o Android 12 | gsi_$arch-user (assinado) |
Dispositivos sendo lançados com o Android 11 | gsi_$arch-user (assinado) |
Dispositivos sendo lançados com o Android 10 | gsi_$arch-user (assinado) |
Dispositivos sendo lançados com o Android 9 | gsi_$arch-userdebug |
Todos os GSIs são criados a partir da base de código do Android 12 e cada arquitetura de CPU tem um binário GSI correspondente (consulte a lista de destinos de compilação em Construindo GSIs ).
Alterações GSI do Android 12
Os dispositivos iniciados ou atualizados para o Android 12 devem usar Android 12 GSIs para testes de conformidade. Isso inclui as seguintes mudanças importantes de GSIs anteriores:
- Nome do alvo. O nome do destino GSI para testes de conformidade foi alterado para
gsi_$arch
. O GSI com nome de destinoaosp_$arch
é mantido para desenvolvedores de aplicativos Android. O plano de testeCTS-on-GSI
também é reduzido para testar a interface do fornecedor. - A GSI herdada foi desativada. O GSI 12 remove as soluções alternativas que acomodam dispositivos Android 8.0 ou 8.1 que não são totalmente Treblizados.
- SEPolicy de depuração do usuário. O GSI
gsi_$arch
contémuserdebug_plat_sepolicy.cil
. Ao atualizar ovendor_boot-debug.img
ouboot-debug.img
específico do OEM,/system/bin/init
carregaráuserdebug_plat_sepolicy.cil
do GSIsystem.img
. Consulte Teste VTS com Debug Ramdisk para obter detalhes.
Alterações GSI do Android 11
Os dispositivos iniciados ou atualizados para o Android 11 devem usar Android 11 GSIs para testes de conformidade. Isso inclui as seguintes mudanças importantes de GSIs anteriores:
- conteúdo system_ext. O Android 11 define uma nova partição
system_ext
. GSI coloca o conteúdo da extensão do sistema na pastasystem/system_ext
. - APEXes. GSI contém APEXs achatados e compactados. Qual usar é determinado pela propriedade do sistema
ro.apex.updatable
na partição do fornecedor no tempo de execução. Referência Configurando o sistema para suportar atualizações APEX para o detalhe.
Alterações GSI do Android 10
Os dispositivos iniciados ou atualizados para o Android 10 devem usar Android 10 GSIs para testes de conformidade. Isso inclui as seguintes mudanças importantes de GSIs anteriores:
- Construção do usuário. A GSI foi criada pelo usuário a partir do Android 10. No Android 10, a GSI criada pelo usuário pode ser usada em testes de conformidade CTS-on-GSI/VTS. Consulte VTS Testing with Debug Ramdisk para obter detalhes.
- Formato não esparso. GSI com alvos
aosp_$arch
são construídos com formato não esparso. Você pode usarimg2simg
para converter um GSI não esparso em formato esparso, se necessário. - Sistema como root. O destino de compilação do GSI herdado chamado
aosp_$arch_a
foi eliminado. Para os dispositivos atualizados do Android 8 ou 8.1 para o Android 10 com ramdisk e sem sistema como root, use o legado GSIaosp_$arch_ab
. Oinit
atualizado em ramdisk suporta OEM system.img com layout de sistema como raiz. - Verifique a inicialização. Usando o GSI, você só precisa desbloquear o dispositivo. Não é necessário desabilitar a verificação de inicialização.
Alterações GSI do Android 9
Os dispositivos iniciados ou atualizados para o Android 9 devem usar Android 9 GSIs para testes de conformidade. Isso inclui as seguintes mudanças importantes de GSIs anteriores:
- Mescla GSI e emulador. Os GSIs são construídos a partir das imagens do sistema de produtos emuladores, por exemplo,
aosp_arm64
eaosp_x86
. - Sistema como root. Nas versões anteriores do Android, os dispositivos que não suportavam atualizações A/B podiam montar a imagem do sistema no diretório
/system
. No Android 9, a raiz da imagem do sistema é montada como raiz do dispositivo. - Interface de fichário de 64 bits. No Android 8.x, GSIs de 32 bits usavam a interface de fichário de 32 bits. O Android 9 não oferece suporte à interface do fichário de 32 bits, portanto, GSIs de 32 bits e GSIs de 64 bits usam a interface do fichário de 64 bits.
- Aplicação de VNDK. No Android 8.1, o VNDK era opcional. A partir do Android 9, o VNDK é obrigatório, então
BOARD_VNDK_VERSION
deve ser definido. - Propriedade do sistema compatível. O Android 9 habilita a verificação de acesso para uma propriedade de sistema compatível (
PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true
).
Mudanças no Keymaster do Android 9
Em versões anteriores do Android, os dispositivos que implementavam o Keymaster 3 ou inferior precisavam verificar se as informações da versão ( ro.build.version.release
e ro.build.version.security_patch
) relatadas pelo sistema em execução correspondiam às informações da versão relatadas pelo bootloader. Essas informações geralmente eram obtidas do cabeçalho da imagem de inicialização.
No Android 9 e superior, esse requisito foi alterado para permitir que os fornecedores inicializem um GSI. Especificamente, o Keymaster não deve realizar a verificação porque as informações de versão relatadas pelo GSI podem não corresponder às informações de versão relatadas pelo carregador de inicialização do fornecedor. Para dispositivos que implementam o Keymaster 3 ou inferior, os fornecedores devem modificar a implementação do Keymaster para ignorar a verificação (ou atualizar para o Keymaster 4). Para obter detalhes sobre o Keymaster, consulte Keystore com suporte de hardware .
Baixando GSIs
Você pode baixar GSIs pré-construídos no site de integração contínua (CI) do AOSP em ci.android.com . Se o tipo de GSI para sua plataforma de hardware não estiver disponível para download, consulte a seção a seguir para obter detalhes sobre a criação de GSIs para destinos específicos.
Criação de GSIs
A partir do Android 9, cada versão do Android tem uma ramificação GSI chamada DESSERT -gsi
no AOSP (por exemplo, android12-gsi
é a ramificação GSI no Android 12). As ramificações GSI incluem o conteúdo do Android com todos os patches de segurança e patches GSI aplicados.
Para criar um GSI, configure a árvore de origem do Android baixando de uma ramificação do GSI e escolhendo um destino de compilação do GSI . Use as tabelas de destino de compilação abaixo para determinar a versão GSI correta para seu dispositivo. Após a conclusão da compilação, o GSI é a imagem do sistema (ou seja, system.img
) e aparece na pasta de saída out/target/product/ generic_arm64
.
Por exemplo, para criar o destino de compilação GSI gsi_arm64-userdebug
na ramificação GSI android12-gsi
, execute os seguintes comandos.
$ repo init -u https://android.googlesource.com/platform/manifest -b android12-gsi $ repo sync -cq $ source build/envsetup.sh $ lunch gsi_arm64-userdebug $ make -j4
Destinos de compilação do Android GSI
Os seguintes destinos de compilação GSI são para dispositivos iniciados no Android 9 ou superior.
nome GSI | arco da CPU | Número de bits da interface do fichário | Sistema como raiz | Construir alvo |
---|---|---|---|---|
gsi_arm | BRAÇO | 64 | Y | gsi_arm-user gsi_arm-userdebug |
gsi_arm64 | ARM64 | 64 | Y | gsi_arm64-user gsi_arm64-userdebug |
gsi_x86 | x86 | 64 | Y | gsi_x86-user gsi_x86-userdebug |
gsi_x86_64 | x86-64 | 64 | Y | gsi_x86_64-user gsi_x86_64-userdebug |
Requisitos para atualizar GSIs
Os dispositivos Android podem ter designs diferentes, portanto, não há nenhum comando genérico ou conjunto de instruções para aplicar um GSI a todos os dispositivos. Consulte o fabricante do dispositivo Android para obter instruções explícitas de flash. Use as etapas a seguir como orientação geral:
- Certifique-se de que o dispositivo tenha o seguinte:
- Treblado
- Um método para desbloquear dispositivos (para que possam ser atualizados usando
fastboot
) - Um estado desbloqueado para torná-lo flashable via
fastboot
(para garantir que você tenha a versão mais recente dofastboot
, crie-o a partir da árvore de origem do Android).
- Apague a partição do sistema atual e, em seguida, atualize o GSI para a partição do sistema.
- Limpe os dados do usuário e limpe os dados de outras partições necessárias (por exemplo, dados do usuário e partições do sistema).
- Reinicie o dispositivo.
Por exemplo, para atualizar um GSI para qualquer dispositivo Pixel:
- Inicialize no modo
fastboot
e desbloqueie o bootloader . - Os dispositivos que suportam
fastbootd
também precisam inicializar nofastbootd
por:$ fastboot reboot fastboot
- Apague e atualize o GSI para a partição do sistema:
$ fastboot erase system $ fastboot flash system system.img
- Limpe os dados do usuário e limpe os dados de outras partições necessárias (por exemplo, dados do usuário e partições do sistema):
$ fastboot -w
- Reiniciar:
$ fastboot reboot
Resizing 'system_a' FAILED (remote: 'Not enough space to resize partition') fastboot: error: Command failedUse o seguinte comando para excluir a partição do produto e liberar espaço para a partição do sistema. Isso fornece espaço extra para atualizar o GSI:
$ fastboot delete-logical-partition product_aO sufixo
_a
deve corresponder ao ID do slot da partição do sistema, como system_a
neste exemplo.Contribuindo para GSIs
O Android agradece suas contribuições para o desenvolvimento de GSI. Você pode se envolver e ajudar a melhorar o GSI:
- Criando um patch GSI.
DESSERT -gsi
não é um branch de desenvolvimento e aceita apenas cherrypicks do branch principal AOSP, portanto, para enviar um patch GSI, você deve:- Envie o patch para a ramificação
main
do AOSP . - Cherrypick o patch para
DESSERT -gsi
. - Registre um bug para que o cherrypick seja revisado.
- Envie o patch para a ramificação
- Reportando bugs GSI ou fazendo outras sugestões. Revise as instruções em Relatando bugs e, em seguida, navegue ou arquive os bugs GSI .
Pontas
Alterando o modo da barra de navegação usando adb
Ao inicializar com GSI, o modo da barra de navegação é configurado pela substituição do fornecedor. Você pode alterar o modo da barra de navegação executando o seguinte comando adb em tempo de execução.
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
Onde mode pode ser threebutton
, twobutton
, gestural
e assim por diante.