Общие образы системы

Общий образ системы (GSI) – это образ системы с измененными конфигурациями для устройств Android. Она считается чистой реализацией Android с неизмененным кодом Android Open Source Project (AOSP), который может успешно работать на любом устройстве с Android 9 или более поздней версии.

GSI используются для запуска тестов VTS и CTS-on-GSI. Системный образ устройства Android заменяется на GSI, а затем тестируется с помощью набора тестов поставщика (VTS) и набора тестов на совместимость (CTS), чтобы убедиться, что устройство правильно реализует интерфейсы поставщика с последней версией Android.

Чтобы начать работу с GSI, ознакомьтесь с информацией о конфигурациях GSI (и допустимых отклонениях) и типах. Когда вы будете готовы использовать образ системы, скачайте и создайте образ системы для целевого устройства, а затем запишите его на устройство Android.

Конфигурация и различия GSI

Текущая конфигурация Android GSI:

Текущая версия Android GSI включает следующие основные изменения:

  • Архитектура ЦП. Поддержка различных инструкций ЦП (ARM, x86 и т. д.) и разрядности ЦП (32- или 64-разрядный).

Целевые образы GSI для тестов на соответствие требованиям Treble

Версия 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

Для тестирования на соответствие требованиям устройств, выпущенных с Android 12 или обновленных до этой версии, необходимо использовать GSI Android 12. В частности, в нем есть следующие важные изменения по сравнению с предыдущими версиями GSI:

  • Название цели. Целевое название GSI для тестов на соответствие требованиям изменено на gsi_$arch. GSI с целевым именем aosp_$arch сохраняется для разработчиков приложений Android. План тестирования CTS-on-GSI также сокращается для тестирования интерфейса поставщика.
  • Устаревшая версия GSI больше не поддерживается. В GSI 12 больше нет обходных путей для устройств с Android 8.0 или 8.1, которые не полностью поддерживают Treble.
  • Userdebug SEPolicy Объект GSI gsi_$arch содержит объект userdebug_plat_sepolicy.cil. При прошивке vendor_boot-debug.img или boot-debug.img, относящихся к определенному производителю оборудования, /system/bin/init загрузит userdebug_plat_sepolicy.cil из GSI system.img. Подробную информацию можно найти в разделе Тестирование VTS с помощью отладочного RAM-диска.

Изменения в образе системы Android 11

Для тестирования на соответствие требованиям устройств, выпущенных с Android 11 или обновленных до этой версии, необходимо использовать GSI Android 11. В частности, в нем есть следующие важные изменения по сравнению с предыдущими версиями GSI:

  • Содержимое system_ext. В Android 11 появился новый раздел system_ext. GSI помещает содержимое системного расширения в папку system/system_ext.
  • APEXes. GSI содержит как распакованные, так и сжатые APEX-файлы. Какой из них использовать, определяется системным свойством ro.apex.updatable в разделе поставщика во время выполнения. Справочная информация Настройка системы для поддержки обновлений APEX

Изменения в образе системы Android 10

Для тестирования на соответствие требованиям на устройствах, выпущенных с Android 10 или обновленных до этой версии, необходимо использовать GSI Android 10. В частности, в нем есть следующие важные изменения по сравнению с предыдущими версиями GSI:

  • Сборка пользователя. GSI содержит пользовательскую сборку Android 10. В Android 10 GSI пользовательской сборки можно использовать для тестирования на соответствие CTS-on-GSI/VTS. Подробную информацию можно найти в разделе Тестирование VTS с помощью отладочного RAM-диска.
  • Неразреженный формат. GSI с целями aosp_$arch создаются в несжатом формате. При необходимости вы можете преобразовать несжатый образ GSI в разреженный формат с помощью команды img2simg.
  • Система как root. Целевая сборка GSI устаревшей версии с названием aosp_$arch_a была удалена. Для устройств, на которых Android 8 или 8.1 был обновлен до Android 10 с ramdisk и non-system-as-root, используйте устаревший образ GSI aosp_$arch_ab. Обновленный init в ramdisk поддерживает OEM system.img с макетом system-as-root.
  • Проверка при запуске. При использовании GSI вам нужно только разблокировать устройство. Отключать проверку при запуске не нужно.

Изменения в образе системы Android 9

На устройствах с Android 9 или более поздней версией ОС для тестирования на соответствие требованиям должны использоваться образы GSI для Android 9. В частности, в нем есть следующие важные изменения по сравнению с предыдущими версиями GSI:

  • Объединяет GSI и эмулятор. GSI создаются на основе образов системы эмуляторов, например aosp_arm64 и aosp_x86.
  • Система как root. В предыдущих версиях Android устройства, не поддерживающие обновления A/B, могли монтировать системный образ в каталоге /system. В Android 9 корень системного образа монтируется как корень устройства.
  • 64-разрядный интерфейс Binder. В Android 8.x 32-разрядные образы GSI использовали 32-разрядный интерфейс Binder. Android 9 не поддерживает 32-разрядный интерфейс Binder, поэтому как 32-разрядные, так и 64-разрядные образы GSI используют 64-разрядный интерфейс Binder.
  • Принудительное применение 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 можно скачать на сайте непрерывной интеграции 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

Цели сборки GSI для Android

Следующие целевые сборки GSI предназначены для устройств с Android 9 или более поздней версии.

Название GSI Архитектура ЦП Разрядность интерфейса брошюратора System-as-root Цель сборки
gsi_arm ARM 32 Г gsi_arm-user
gsi_arm-userdebug
gsi_arm64 ARM64 64 Г gsi_arm64-user
gsi_arm64-userdebug
gsi_x86 x86 32 Г gsi_x86-user
gsi_x86-userdebug
gsi_x86_64 x86-64 64 Г gsi_x86_64-user
gsi_x86_64-userdebug

Требования к прошивке образов GSI

Устройства Android могут иметь разный дизайн, поэтому нет универсальной команды или набора инструкций для установки GSI, которые подходили бы для всех устройств. Чтобы узнать, как это сделать, обратитесь к производителю устройства Android. Следуйте общим рекомендациям ниже.

  1. Убедитесь, что на устройстве есть:
    • Treblized
    • Способ разблокировки устройств (чтобы их можно было прошить с помощью fastboot).
    • Разблокированное состояние, чтобы его можно было прошить с помощью fastboot. Чтобы у вас была последняя версия fastboot, соберите ее из дерева исходного кода Android.
  2. Удалите текущий системный раздел, а затем перенесите GSI в системный раздел.
  3. Удалите пользовательские данные и очистите данные из других необходимых разделов (например, пользовательских данных и системных разделов).
  4. Перезагрузите устройство.

Например, чтобы установить образ GSI на любое устройство Pixel, выполните следующие действия:

  1. Загрузите устройство в режиме fastboot и разблокируйте загрузчик операционной системы.
  2. Устройства, поддерживающие fastbootd, также должны загружаться в fastbootd, выполняя следующие действия:
    $ fastboot reboot fastboot
  3. Очистите системный раздел и запишите на него GSI:
    $ fastboot erase system
    $ fastboot flash system system.img
  4. Если ваше устройство поддерживает Android Virtualization Framework, прошейте встроенное ПО защищенной виртуальной машины:
    $ fastboot flash pvmfw pvmfw.img
    
  5. Удалите пользовательские данные и очистите данные из других необходимых разделов (например, разделов пользовательских данных и системы):
    $ fastboot -w
  6. Перезагрузите устройство в режиме загрузчика:
    $ fastboot reboot-bootloader
  7. Отключите проверку Verified Boot при прошивке предоставленного файла vbmeta:
    $ fastboot --disable-verification flash vbmeta vbmeta.img
  8. Reboot:
    $ fastboot reboot
На устройствах с Android 10 или более поздней версии, на которых системные разделы имеют небольшой размер, при установке образа GSI может появиться следующее сообщение об ошибке:
    Resizing 'system_a'    FAILED (remote: 'Not enough space to resize partition')
    fastboot: error: Command failed
Чтобы удалить раздел продукта и освободить место для системного раздела, используйте следующую команду: Это дает дополнительное пространство для прошивки GSI:
$ fastboot delete-logical-partition product_a
Постфикс _a должен соответствовать идентификатору слота системного раздела, например system_a в этом примере.

Как внести вклад в развитие GSI

Мы будем рады, если вы внесете свой вклад в разработку GSI. Вы можете помочь нам улучшить GSI, выполнив следующие действия:

  • Как создать исправление для образа системы DESSERT-gsi не является ветвью разработки и принимает только исправления из последней ветви AOSP (android17-release). Чтобы отправить исправление GSI, выполните следующие действия:
    1. Отправьте исправление в ветку AOSP android17-release.
    2. Перенесите исправление в ветку DESSERT-gsi.
    3. Сообщите об ошибке, чтобы мы проверили выборочный перенос.
  • Сообщать об ошибках и отправлять другие предложения. Ознакомьтесь с инструкциями в разделе Как сообщать об ошибках, а затем найдите или создайте ошибку GSI.

Советы

Как изменить режим панели навигации с помощью adb

При загрузке с GSI режим панели навигации настраивается с помощью переопределения поставщика. Вы можете изменить режим панели навигации, выполнив следующую команду adb во время выполнения.

adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode

где mode может быть threebutton, twobutton, gestural и т. д.