Универсальный образ системы (GSI) — это образ системы с настроенными конфигурациями для устройств Android. Он считается чистой реализацией Android с немодифицированным кодом Android Open Source Project (AOSP), который может успешно работать на любом устройстве Android под управлением Android 9 или более поздней версии.
GSI используются для проведения тестов VTS и CTS-on-GSI. Образ системы устройства Android заменяется GSI, а затем тестируется с помощью Vendor Test Suite (VTS) и Compatibility Test Suite (CTS), чтобы убедиться, что устройство корректно реализует интерфейсы вендора с последней версией Android.
Чтобы начать работу с GSI, ознакомьтесь со следующими разделами, где вы найдете подробную информацию о конфигурациях GSI (и допустимых отклонениях) и типах . Когда вы будете готовы использовать GSI, загрузите и соберите GSI для вашего целевого устройства, а затем запишите GSI на устройство Android.
Конфигурация GSI и отклонения
Текущая версия Android GSI имеет следующую конфигурацию:
- Treble. GSI включает полную поддержку архитектурных изменений на основе AIDL/HIDL (также известных как Treble ), включая поддержку интерфейсов AIDL и HIDL . Вы можете использовать GSI на любом устройстве Android, использующем интерфейсы поставщиков AIDL/HIDL. (Подробнее см. в разделе «Ресурсы по архитектуре» ).
 - Файловая система. GSI использует файловую систему ext4.
 
Текущая версия Android GSI включает в себя следующие основные изменения:
- Архитектура процессора. Поддержка различных инструкций процессора (ARM, x86 и т. д.) и разрядности процессора (32 бита или 64 бита).
 
Цели GSI для тестов на соответствие высоким частотам
GSI, используемый для тестирования на соответствие, определяется версией Android, с которой запускается устройство.
| Тип устройства | Цель сборки | 
|---|---|
| Устройства, выпускаемые с Android 15 |  gsi_$arch-user (подпись) | 
| Устройства, выпускаемые с Android 14 |  gsi_$arch-user (подпись) | 
| Устройства, выпускаемые с Android 13 |  gsi_$arch-user (подпись) | 
| Устройства, выпускаемые с Android 12L |  gsi_$arch-user (подпись) | 
| Устройства, выпускаемые с Android 12 |  gsi_$arch-user (подпись) | 
| Устройства, выпускаемые с Android 11 |  gsi_$arch-user (подпись) | 
Все GSI построены на основе кодовой базы Android 12, и каждая архитектура ЦП имеет соответствующий двоичный файл GSI (см. список целей сборки в разделе Создание GSI ).
Изменения Android 12 GSI
Устройства, выпущенные с Android 12 или обновленные до этой версии, должны использовать для тестирования соответствия стандарту GSI для Android 12. Это включает в себя следующие основные изменения по сравнению с предыдущими GSI:
-  Имя цели. Имя цели GSI для тестов соответствия изменено на 
gsi_$arch. GSI с именем целиaosp_$archсохранен для разработчиков приложений Android. План тестированияCTS-on-GSIтакже сокращен для тестирования интерфейса поставщика. - Устаревший GSI постепенно отменяется. В GSI 12 устранены обходные пути, позволяющие использовать устройства Android 8.0 или 8.1, которые не полностью поддерживают Trebl.
 -  Userdebug SEPolicy. GSI 
gsi_$archсодержитuserdebug_plat_sepolicy.cil. При прошивке OEM-специфичных образовvendor_boot-debug.imgилиboot-debug.img,/system/bin/initзагрузитuserdebug_plat_sepolicy.cilиз GSIsystem.img. Подробности см. в статье «Тестирование VTS с отладочным Ramdisk» . 
Изменения Android 11 GSI
Устройства, выпущенные с Android 11 или обновленные до этой версии, должны использовать для тестирования соответствия стандарту GSI для Android 11. Это включает в себя следующие основные изменения по сравнению с предыдущими GSI:
-  Содержимое system_ext. В Android 11 определён новый раздел 
system_ext. GSI помещает содержимое расширения system в папкуsystem/system_ext. -  APEX-файлы. GSI содержит как сжатые, так и упрощённые APEX-файлы. Выбор используемого варианта определяется системным свойством 
ro.apex.updatableв разделе поставщика во время выполнения. Подробнее см. в статье «Настройка системы для поддержки обновлений APEX» . 
Изменения Android 10 GSI
Устройства, выпущенные с Android 10 или обновленные до этой версии, должны использовать для тестирования соответствия стандарту GSI для Android 10. Это включает в себя следующие основные изменения по сравнению с предыдущими GSI:
- Пользовательская сборка. GSI использует пользовательскую сборку из Android 10. В Android 10 пользовательскую сборку GSI можно использовать для тестирования соответствия CTS-on-GSI/VTS. Подробности см. в статье «Тестирование VTS с отладочным Ramdisk» .
 -  Неразобранном формате. GSI-файлы с целями 
aosp_$archсоздаются в неразобранном формате. При необходимости можно использоватьimg2simgдля преобразования неразобранного GSI-файла в разреженный формат. -  Система с правами root. Устаревшая цель сборки GSI 
aosp_$arch_aбыла постепенно упразднена. Для устройств, обновлённых с Android 8 или 8.1 до Android 10 с RAM-диском и без прав root, используйте устаревшую цель сборки GSIaosp_$arch_ab. Обновлённыйinitв RAM-диске поддерживает OEM-файл system.img с правами root. - Проверка загрузки. Используя GSI, вам нужно только разблокировать устройство. Отключать проверку загрузки не обязательно.
 
Изменения Android 9 GSI
Устройства, выпущенные с Android 9 или обновленные до этой версии, должны использовать для тестирования соответствия стандарту GSI для Android 9. Это включает в себя следующие основные изменения по сравнению с предыдущими GSI:
-  Объединяет GSI и эмулятор. GSI создаются из системных образов продуктов-эмуляторов, например, 
aosp_arm64иaosp_x86. -  Система как корневой каталог. В предыдущих версиях Android устройства, не поддерживающие A/B-обновления, могли монтировать образ системы в каталог 
/system. В Android 9 корневой каталог образа системы монтируется как корневой каталог устройства. - 64-битный интерфейс привязки. В Android 8.x 32-битные GSI-инструменты использовали 32-битный интерфейс привязки. Android 9 не поддерживает 32-битный интерфейс привязки, поэтому как 32-битные GSI, так и 64-битные GSI-инструменты используют 64-битный интерфейс привязки.
 -  Принудительное использование VNDK. В Android 8.1 использование VNDK было необязательным. Начиная с Android 9, VNDK является обязательным, поэтому необходимо задать 
BOARD_VNDK_VERSION. -  Совместимое системное свойство. Android 9 включает проверку доступа для совместимого системного свойства ( 
PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true). 
Изменения в Android 9 Keymaster
 В более ранних версиях Android устройства с Keymaster 3 или ниже должны были проверять, что информация о версии ( ro.build.version.release и ro.build.version.security_patch ), сообщаемая работающей системой, совпадает с информацией о версии, сообщаемой загрузчиком. Эта информация обычно получалась из заголовка загрузочного образа.
В Android 9 и более поздних версиях это требование было изменено, чтобы поставщики могли загружать GSI. В частности, Keymaster не должен выполнять проверку, поскольку информация о версии, сообщаемая GSI, может не совпадать с информацией о версии, сообщаемой загрузчиком поставщика. Для устройств с версией Keymaster 3 или ниже поставщики должны изменить реализацию Keymaster, чтобы пропустить проверку (или обновиться до Keymaster 4). Подробнее о Keymaster см. в разделе Аппаратное хранилище ключей .
Загрузить GSI
Вы можете загрузить готовые GSI-инструменты с сайта непрерывной интеграции (CI) AOSP по адресу ci.android.com . Если тип GSI для вашей аппаратной платформы недоступен для загрузки, обратитесь к следующему разделу за подробной информацией о создании GSI для конкретных целей.
Создание GSI
 Начиная с Android 9, каждая версия Android имеет ветку GSI с именем DESSERT -gsi в AOSP (например, android12-gsi — это ветка GSI в Android 12). Ветки GSI включают в себя содержимое Android со всеми применёнными исправлениями безопасности и исправлениями GSI .
 Чтобы собрать GSI, настройте дерево исходного кода Android, загрузив его из ветки GSI и выбрав целевой объект сборки GSI . Используйте таблицы целей сборки ниже, чтобы определить правильную версию GSI для вашего устройства. После завершения сборки GSI станет образом системы (то есть system.img ) и появится в выходной папке out/target/product/ generic_arm64 .
 Например, чтобы собрать целевой объект сборки GSI gsi_arm64-userdebug на ветке GSI android12-gsi , выполните следующие команды.
$ 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
Цели сборки Android GSI
Следующие цели сборки GSI предназначены для устройств, работающих на базе Android 9 или выше.
| Имя GSI | Архитектура процессора | Разрядность интерфейса Binder | Система-как-root | Цель сборки | 
|---|---|---|---|---|
 gsi_arm | РУКА | 32 | Y |  gsi_arm-usergsi_arm-userdebug | 
 gsi_arm64 | ARM64 | 64 | Y |  gsi_arm64-usergsi_arm64-userdebug | 
 gsi_x86 | x86 | 32 | Y |  gsi_x86-usergsi_x86-userdebug | 
 gsi_x86_64 | x86-64 | 64 | Y |  gsi_x86_64-usergsi_x86_64-userdebug | 
Требования к прошивке GSI
Устройства Android могут иметь различную конструкцию, поэтому не существует универсальной команды или набора инструкций для прошивки GSI, подходящей для всех устройств. Обратитесь к производителю устройства Android за подробными инструкциями по прошивке. В качестве общего руководства используйте следующие шаги:
-  Убедитесь, что устройство имеет следующее:
- Утроенный
 -  Метод разблокировки устройств (чтобы их можно было прошить с помощью 
fastboot) -  Разблокированное состояние, позволяющее прошивать его через 
fastboot(чтобы убедиться, что у вас установлена последняя версияfastboot, соберите ее из исходного дерева Android). 
 - Сотрите текущий системный раздел, затем перепрошейте GSI на системный раздел.
 - Очистите пользовательские данные и удалите данные из других необходимых разделов (например, разделов пользовательских данных и системных разделов).
 - Перезагрузите устройство.
 
Например, чтобы прошить GSI на любое устройство Pixel:
-  Загрузитесь в режиме 
fastbootи разблокируйте загрузчик . -  Устройства, поддерживающие 
fastbootd, также должны загрузиться вfastbootd:$ fastboot reboot fastboot
 - Сотрите и перепишите GSI в системный раздел: 
$ fastboot erase system $ fastboot flash system system.img
 - Если ваше устройство поддерживает Android Virtual Framework, прошейте прошивку защищенной виртуальной машины: 
$ fastboot flash pvmfw pvmfw.img
 - Очистите пользовательские данные и очистите данные из других необходимых разделов (например, разделов пользовательских данных и системных разделов): 
$ fastboot -w
 - Перезагрузитесь обратно в загрузчик: 
$ fastboot reboot-bootloader
 - Отключите проверку Verified Boot при перепрошивке предоставленного vbmeta: 
$ fastboot --disable-verification flash vbmeta vbmeta.img
 - Reboot:
$ fastboot reboot
 
    Resizing 'system_a'    FAILED (remote: 'Not enough space to resize partition')
    fastboot: error: Command failed$ fastboot delete-logical-partition product_a
_a должен соответствовать идентификатору слота системного раздела, например system_a в этом примере.Внести вклад в GSI
Android приветствует ваш вклад в разработку GSI. Вы можете принять участие и помочь улучшить GSI следующими способами:
-  Создание патча GSI. 
DESSERT -gsiне является веткой разработки и принимает только выборочные версии из последней ветки AOSP (android16-release). Поэтому для отправки патча GSI необходимо:-  Отправьте патч в ветку AOSP 
android16-release. -  Выберите патч для 
DESSERT -gsi. - Сообщите об ошибке, чтобы мы рассмотрели ваш вариант.
 
 -  Отправьте патч в ветку AOSP 
 - Как сообщить об ошибках GSI или внести другие предложения. Ознакомьтесь с инструкциями в разделе «Сообщение об ошибках» , затем просмотрите или отправьте сообщения об ошибках GSI .
 
Советы
Измените режим панели навигации с помощью adb
При загрузке с GSI режим панели навигации настраивается производителем. Вы можете изменить режим панели навигации, выполнив следующую команду adb в режиме выполнения.
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
Где mode может быть threebutton , twobutton , gestural и т. д.