Una imagen genérica del sistema (GSI) es una imagen del sistema con configuraciones ajustadas para dispositivos Android. Se considera una implementación pura de Android con código del Proyecto de código abierto de Android (AOSP) no modificado que cualquier dispositivo Android que ejecute Android 9 o superior puede ejecutarse correctamente.
Los GSI se utilizan para ejecutar pruebas VTS y CTS-on-GSI. La imagen del sistema de un dispositivo Android se reemplaza con un GSI y luego se prueba con Vendor Test Suite (VTS) y Compatibility Test Suite (CTS) para garantizar que el dispositivo implemente las interfaces del proveedor correctamente con la última versión de Android.
Para comenzar con GSI, revise las siguientes secciones para obtener detalles sobre las configuraciones de GSI (y las variaciones permitidas) y los tipos . Cuando esté listo para usar un GSI, descargue y cree el GSI para su dispositivo objetivo, luego actualice el GSI a un dispositivo Android.
Configuración y variaciones de GSI
El Android GSI actual tiene la siguiente configuración:
- Triplicar. GSI incluye soporte completo para los cambios arquitectónicos basados en AIDL/HIDL (también conocidos como Treble ), incluido el soporte para las interfaces AIDL y HIDL . Puede utilizar GSI en cualquier dispositivo Android que utilice interfaces de proveedor AIDL/HIDL. (Para obtener más detalles, consulte Recursos de arquitectura ).
- Sistema de archivos. El GSI utiliza el sistema de archivos ext4.
El GSI actual de Android incluye las siguientes variaciones principales:
- Arquitectura de la CPU. Soporte para diferentes instrucciones de CPU (ARM, x86, etc.) y bits de CPU (32 bits o 64 bits).
Objetivos de GSI para las pruebas de cumplimiento de Treble
El GSI utilizado para las pruebas de cumplimiento está determinado por la versión de Android con la que se inicia el dispositivo.
Tipo de dispositivo | Objetivo de construcción |
---|---|
Dispositivos que se inician con Android 12 | gsi_$arch-user (Firmado) |
Dispositivos que se inician con Android 11 | gsi_$arch-user (Firmado) |
Dispositivos que se inician con Android 10 | gsi_$arch-user (Firmado) |
Dispositivos que se inician con Android 9 | gsi_$arch-userdebug |
Todos los GSI se crean a partir del código base de Android 12 y cada arquitectura de CPU tiene un binario GSI correspondiente (consulte la lista de objetivos de compilación en Creación de GSI ).
Cambios en Android 12 GSI
Los dispositivos que se inician con Android 12 o se actualizan a él deben usar GSI de Android 12 para las pruebas de cumplimiento. Esto incluye los siguientes cambios importantes con respecto a GSI anteriores:
- Nombre del objetivo. El nombre del objetivo GSI para las pruebas de cumplimiento se cambia a
gsi_$arch
. El GSI con nombre de destinoaosp_$arch
se conserva para los desarrolladores de aplicaciones de Android. El plan de pruebaCTS-on-GSI
también se reduce para probar la interfaz del proveedor. - El GSI heredado se eliminará gradualmente. GSI 12 elimina las soluciones alternativas que se adaptan a dispositivos Android 8.0 u 8.1 que no están completamente Treblizados.
- Política SE de depuración de usuario. El GSI
gsi_$arch
contieneuserdebug_plat_sepolicy.cil
. Al actualizar elvendor_boot-debug.img
oboot-debug.img
específico del OEM,/system/bin/init
cargaráuserdebug_plat_sepolicy.cil
desde GSIsystem.img
. Consulte Pruebas VTS con Debug Ramdisk para obtener más detalles.
Cambios en Android 11 GSI
Los dispositivos que se inician con Android 11 o se actualizan a él deben usar GSI de Android 11 para las pruebas de cumplimiento. Esto incluye los siguientes cambios importantes con respecto a GSI anteriores:
- contenidos system_ext. Android 11 define una nueva partición
system_ext
. GSI coloca el contenido de la extensión del sistema en la carpetasystem/system_ext
. - APEX. GSI contiene APEX tanto aplanados como comprimidos. Cuál usar está determinado por la propiedad del sistema
ro.apex.updatable
en la partición del proveedor en tiempo de ejecución. Consulte Configuración del sistema para admitir actualizaciones de APEX para obtener más detalles.
Cambios en Android 10 GSI
Los dispositivos que se inician con Android 10 o se actualizan a él deben usar GSI de Android 10 para las pruebas de cumplimiento. Esto incluye los siguientes cambios importantes con respecto a GSI anteriores:
- Construcción de usuario. GSI tiene una compilación de usuario de Android 10. En Android 10, la compilación de usuario GSI se puede utilizar en las pruebas de cumplimiento de CTS-on-GSI/VTS. Consulte Pruebas de VTS con Debug Ramdisk para obtener más detalles.
- Formato sin distribuir. GSI con objetivos
aosp_$arch
se crean con formato no distribuido. Puede utilizarimg2simg
para convertir un GSI no distribuido a formato disperso si es necesario. - Sistema como raíz. El objetivo de compilación GSI heredado denominado
aosp_$arch_a
se había eliminado gradualmente. Para los dispositivos actualizados de Android 8 u 8.1 a Android 10 con ramdisk y sin sistema como raíz, use el GSI heredadoaosp_$arch_ab
. Elinit
actualizado en ramdisk admite OEM system.img con diseño de sistema como raíz. - Verificar arranque. Usando GSI solo necesitas desbloquear el dispositivo. No es necesario desactivar la verificación de inicio.
Cambios en Android 9 GSI
Los dispositivos que se inician con Android 9 o se actualizan a él deben usar Android 9 GSI para las pruebas de cumplimiento. Esto incluye los siguientes cambios importantes con respecto a GSI anteriores:
- Fusiona GSI y emulador. Los GSI se crean a partir de imágenes del sistema de productos emuladores, por ejemplo,
aosp_arm64
yaosp_x86
. - Sistema como raíz. En versiones anteriores de Android, los dispositivos que no admitían actualizaciones A/B podían montar la imagen del sistema en el directorio
/system
. En Android 9, la raíz de la imagen del sistema se monta como la raíz del dispositivo. - Interfaz de carpeta de 64 bits. En Android 8.x, los GSI de 32 bits usaban la interfaz de carpeta de 32 bits. Android 9 no es compatible con la interfaz de carpeta de 32 bits, por lo que tanto los GSI de 32 bits como los de 64 bits utilizan la interfaz de carpeta de 64 bits.
- Aplicación de VNDK. En Android 8.1, VNDK era opcional. A partir de Android 9, VNDK es obligatorio, por lo que se debe configurar
BOARD_VNDK_VERSION
. - Propiedad del sistema compatible. Android 9 habilita la verificación de acceso a una propiedad del sistema compatible (
PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true
).
Cambios en Keymaster de Android 9
En versiones anteriores de Android, los dispositivos que implementaban Keymaster 3 o inferior debían verificar que la información de la versión ( ro.build.version.release
y ro.build.version.security_patch
) reportada por el sistema en ejecución coincidiera con la información de la versión reportada por el gestor de arranque. Esta información normalmente se obtenía del encabezado de la imagen de inicio.
En Android 9 y versiones posteriores, este requisito cambió para permitir a los proveedores iniciar un GSI. Específicamente, Keymaster no debería realizar la verificación porque la información de la versión reportada por GSI puede no coincidir con la información de la versión reportada por el gestor de arranque del proveedor. Para los dispositivos que implementan Keymaster 3 o inferior, los proveedores deben modificar la implementación de Keymaster para omitir la verificación (o actualizar a Keymaster 4). Para obtener más información sobre Keymaster, consulte Almacén de claves respaldado por hardware .
Descargar GSI
Puede descargar GSI prediseñados desde el sitio web de integración continua (CI) de AOSP en ci.android.com . Si el tipo de GSI para su plataforma de hardware no está disponible para descargar, consulte la siguiente sección para obtener detalles sobre cómo crear GSI para objetivos específicos.
Construir GSI
A partir de Android 9, cada versión de Android tiene una rama GSI llamada DESSERT -gsi
en AOSP (por ejemplo, android12-gsi
es la rama GSI en Android 12). Las sucursales de GSI incluyen el contenido de Android con todos los parches de seguridad y parches de GSI aplicados.
Para crear un GSI, configure el árbol de fuentes de Android descargándolo desde una rama de GSI y eligiendo un destino de compilación de GSI . Utilice las tablas de destino de compilación a continuación para determinar la versión GSI correcta para su dispositivo. Una vez completada la compilación, GSI es la imagen del sistema (es decir, system.img
) y aparece en la carpeta de salida out/target/product/ generic_arm64
.
Por ejemplo, para compilar el objetivo de compilación GSI gsi_arm64-userdebug
en la rama GSI android12-gsi
, ejecute los siguientes 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
Objetivos de compilación de Android GSI
Los siguientes objetivos de compilación de GSI son para dispositivos que se inician con Android 9 o superior.
Nombre GSI | arco de CPU | Bits de la interfaz de carpeta | Sistema como raíz | Objetivo de construcción |
---|---|---|---|---|
gsi_arm | BRAZO | 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 flashear GSI
Los dispositivos Android pueden tener diferentes diseños, por lo que no existe un comando genérico ni un conjunto de instrucciones para actualizar un GSI que se aplique a todos los dispositivos. Consulte con el fabricante del dispositivo Android para obtener instrucciones explícitas de actualización. Utilice los siguientes pasos como guía general:
- Asegúrese de que el dispositivo tenga lo siguiente:
- treblizado
- Un método para desbloquear dispositivos (para que puedan actualizarse usando
fastboot
) - Un estado desbloqueado para que se pueda actualizar a través de
fastboot
(para asegurarse de tener la última versión defastboot
, compílelo desde el árbol de fuentes de Android).
- Borre la partición actual del sistema, luego actualice el GSI a la partición del sistema.
- Borre los datos del usuario y borre los datos de otras particiones necesarias (por ejemplo, datos del usuario y particiones del sistema).
- Reinicie el dispositivo.
Por ejemplo, para actualizar un GSI a cualquier dispositivo Pixel:
- Inicie en modo
fastboot
y desbloquee el gestor de arranque . - Los dispositivos que admiten
fastbootd
también deben iniciarse enfastbootd
mediante:$ fastboot reboot fastboot
- Borre y actualice el GSI a la partición del sistema:
$ fastboot erase system $ fastboot flash system system.img
- Borre los datos del usuario y borre los datos de otras particiones necesarias (por ejemplo, datos del usuario y particiones del sistema):
$ fastboot -w
- Reiniciar:
$ fastboot reboot
Resizing 'system_a' FAILED (remote: 'Not enough space to resize partition') fastboot: error: Command failedUtilice el siguiente comando para eliminar la partición del producto y liberar espacio para la partición del sistema. Esto proporciona espacio adicional para actualizar el GSI:
$ fastboot delete-logical-partition product_aEl sufijo
_a
debe coincidir con el ID de ranura de la partición del sistema, como system_a
en este ejemplo.Contribuir a GSI
Android agradece sus contribuciones al desarrollo de GSI. Puede participar y ayudar a mejorar el GSI de la siguiente manera:
- Creando un parche GSI.
DESSERT -gsi
no es una rama de desarrollo y solo acepta selecciones de la rama principal de AOSP, por lo que para enviar un parche GSI, debe:- Envíe el parche a la rama
main
de AOSP . - Elija el parche para
DESSERT -gsi
. - Presente un error para que se revise la selección.
- Envíe el parche a la rama
- Informar errores de GSI o hacer otras sugerencias. Revise las instrucciones en Informar de errores y luego busque o archive errores de GSI .
Consejos
Cambiar el modo de la barra de navegación usando adb
Al arrancar con GSI, el modo de la barra de navegación se configura mediante la anulación del proveedor. Puede cambiar el modo de la barra de navegación ejecutando el siguiente comando adb en tiempo de ejecución.
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
Donde mode puede ser threebutton
, twobutton
, gestural
, etc.