Uma imagem genérica do sistema (GSI) é uma imagem do sistema com configurações ajustadas para dispositivos Android. É considerado uma implementação Android pura com código Android Open Source Project (AOSP) não modificado que qualquer dispositivo Android executando o Android 9 ou superior pode ser executado 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 uma GSI e testada 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 com 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 destino do seu dispositivo e, em seguida, atualize o GSI para um dispositivo Android.
Configuração e variações de GSI
A GSI do Android atual tem a seguinte configuração:
- Agudo. O GSI inclui suporte completo para as mudanças de arquitetura 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 fornecedor AIDL/HIDL. (Para obter mais detalhes, consulte Recursos de arquitetura .)
- Sistema de arquivo. O GSI usa o sistema de arquivos ext4.
O GSI do Android atual inclui as seguintes variações principais:
- Arquitetura da CPU. Suporte para diferentes instruções de CPU (ARM, x86, etc.) e bitness da CPU (32 bits ou 64 bits).
Metas GSI para testes de conformidade do Treble
O GSI usado para teste de conformidade é determinado pela versão do Android com a qual o dispositivo é iniciado.
Tipo de dispositivo | Destino de compilação |
---|---|
Dispositivos lançados com Android 12 | gsi_$arch-user (assinado) |
Dispositivos lançados com o Android 11 | gsi_$arch-user (assinado) |
Dispositivos lançados com Android 10 | gsi_$arch-user (assinado) |
Dispositivos lançados com 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 Como criar GSIs ).
Alterações no GSI do Android 12
Os dispositivos lançados ou atualizados para o Android 12 devem usar GSIs do Android 12 para testes de conformidade. Isso inclui as seguintes alterações principais de GSIs anteriores:
- Nome do alvo. O nome do destino GSI para testes de conformidade foi alterado para
gsi_$arch
. O GSI com o 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. - O GSI legado é descontinuado. O GSI 12 remove as soluções alternativas que acomodam dispositivos Android 8.0 ou 8.1 que não são totalmente Treblized.
- Userdebug SEPolicy. O GSI
gsi_$arch
contémuserdebug_plat_sepolicy.cil
. Aovendor_boot-debug.img
específico do OEM ouboot-debug.img
,/system/bin/init
carregaráuserdebug_plat_sepolicy.cil
do GSIsystem.img
. Consulte Teste de VTS com Debug Ramdisk para obter detalhes.
Alterações no GSI do Android 11
Os dispositivos lançados ou atualizados para o Android 11 devem usar GSIs do Android 11 para testes de conformidade. Isso inclui as seguintes alterações principais de GSIs anteriores:
- conteúdo do system_ext. O Android 11 define uma nova partição
system_ext
. A GSI coloca o conteúdo da extensão do sistema na pastasystem/system_ext
. - APEX. A GSI contém APEXes achatados e compactados. Qual usar é determinado pela propriedade do sistema
ro.apex.updatable
na partição do fornecedor em tempo de execução. Consulte Configurando o sistema para oferecer suporte a atualizações do APEX para obter detalhes.
Alterações no GSI do Android 10
Os dispositivos lançados ou atualizados para o Android 10 devem usar GSIs do Android 10 para testes de conformidade. Isso inclui as seguintes alterações principais de GSIs anteriores:
- Construção do usuário. A GSI tem a versão do usuário do Android 10. No Android 10, a GSI da versão do usuário pode ser usada em testes de conformidade CTS-on-GSI/VTS. Consulte Teste de VTS com 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-raiz. O destino de compilação GSI legado chamado
aosp_$arch_a
foi descontinuado. Para os dispositivos atualizados do Android 8 ou 8.1 para o Android 10 com ramdisk e sem sistema como root, use o GSI legadoaosp_$arch_ab
. Oinit
atualizado em ramdisk suporta OEM system.img com layout de sistema como raiz. - Verifique a inicialização. Usando GSI você só precisa desbloquear o dispositivo. Não é necessário desabilitar a inicialização de verificação.
Alterações GSI do Android 9
Os dispositivos iniciados com ou atualizados para o Android 9 devem usar GSIs do Android 9 para testes de conformidade. Isso inclui as seguintes alterações principais 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-raiz. 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 a raiz do dispositivo. - Interface de fichário de 64 bits. No Android 8.x, os GSIs de 32 bits usavam a interface do binder de 32 bits. O Android 9 não é compatível com a interface do binder de 32 bits, portanto, GSIs de 32 bits e GSIs de 64 bits usam a interface do binder de 64 bits.
- Aplicação do VNDK. No Android 8.1, o VNDK era opcional. A partir do Android 9, o VNDK é obrigatório, portanto,
BOARD_VNDK_VERSION
deve ser definido. - Propriedade de 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 Android 9 Keymaster
Nas versões anteriores do Android, os dispositivos que implementavam o Keymaster 3 ou inferior precisavam verificar se as informações de versão ( ro.build.version.release
e ro.build.version.security_patch
) relatadas pelo sistema em execução correspondiam às informações de 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 uma 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é-criados do 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 como criar GSIs para destinos específicos.
Construindo 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 uma GSI, configure a árvore de origem do Android fazendo download de uma ramificação da GSI e escolhendo um destino de compilação da 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 compilar o destino de compilação GSI gsi_arm64-userdebug
na ramificação GSI android12-gsi
, execute os comandos a seguir.
$ 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 de GSI são para dispositivos iniciados no Android 9 ou superior.
Nome GSI | Arco de CPU | Bitness da interface do fichário | Sistema como raiz | Destino de compilação |
---|---|---|---|---|
gsi_arm | BRAÇO | 64 | S | gsi_arm-user gsi_arm-userdebug |
gsi_arm64 | ARM64 | 64 | S | gsi_arm64-user gsi_arm64-userdebug |
gsi_x86 | x86 | 64 | S | gsi_x86-user gsi_x86-userdebug |
gsi_x86_64 | x86-64 | 64 | S | gsi_x86_64-user gsi_x86_64-userdebug |
Requisitos para flashear GSIs
Os dispositivos Android podem ter designs diferentes, portanto, não há comando genérico ou conjunto de instruções para atualizar uma GSI para aplicar a todos os dispositivos. Consulte o fabricante do dispositivo Android para obter instruções explícitas de flash. Use as etapas a seguir como uma diretriz geral:
- Certifique-se de que o dispositivo tenha o seguinte:
- Treblited
- Um método para desbloquear dispositivos (para que eles 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
, compile-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 fazer o flash de uma GSI em 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
- Reinicialização:
$ fastboot reboot
Resizing 'system_a' FAILED (remote: 'Not enough space to resize partition') fastboot: error: Command failedUse o comando a seguir 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 postfix
_a
deve corresponder ao ID do slot da partição do sistema, como system_a
neste exemplo.Contribuindo para o GSI
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 é uma ramificação de desenvolvimento e aceita apenas seleções da ramificação mestre AOSP, portanto, para enviar um patch GSI, você deve:- Envie o patch para o branch
master
do AOSP . - Escolha o patch para
DESSERT -gsi
. - Registre um bug para que o cherrypick seja revisado.
- Envie o patch para o branch
- Relatando bugs de GSI ou fazendo outras sugestões. Revise as instruções em Reporting Bugs , então procure ou arquive 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 o mode pode ser threebutton
botões , twobutton
, gestural
e assim por diante.