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

Общий образ системы (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 имеет следующую конфигурацию:

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

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

Цели GSI для тестов на соответствие Treble

GSI, используемый для тестирования на соответствие, определяется версией Android, с которой запускается устройство.

Тип устройства Построить цель
Устройства, запускаемые с Android 12 gsi_$arch-user (подпись)
Устройства, запускаемые с Android 11 gsi_$arch-user (подпись)
Устройства, запускаемые с Android 10 gsi_$arch-user (подпись)
Устройства, запускаемые с Android 9 gsi_$arch-userdebug

Все GSI созданы на базе кодовой базы Android 12, и каждая архитектура ЦП имеет соответствующий двоичный файл GSI (см. список целей сборки в разделе «Создание GSI» ).

Изменения Android 12 GSI

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

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

Изменения GSI в Android 11

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

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

Изменения Android 10 GSI

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

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

Изменения Android 9 GSI

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

  • Объединяет GSI и эмулятор. GSI собираются из системных образов продуктов-эмуляторов, например aosp_arm64 и aosp_x86 .
  • Система как root. В предыдущих версиях Android устройства, которые не поддерживали обновления A/B, могли монтировать образ системы в каталог /system . В Android 9 корень образа системы монтируется как корень устройства.
  • 64-битный интерфейс связующего. В Android 8.x 32-битные GSI использовали 32-битный интерфейс связывания. Android 9 не поддерживает 32-битный интерфейс привязки, поэтому как 32-битные, так и 64-битные GSI используют 64-битный интерфейс привязки.
  • Исполнение ВНДК. В Android 8.1 VNDK был необязательным. Начиная с Android 9, VNDK является обязательным, поэтому необходимо установить BOARD_VNDK_VERSION .
  • Совместимое системное свойство. Android 9 включает проверку доступа к совместимому системному свойству ( PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true ).

Изменения Keymaster в Android 9

В более ранних версиях 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 РУКА 64 Да gsi_arm-user
gsi_arm-userdebug
gsi_arm64 ARM64 64 Да gsi_arm64-user
gsi_arm64-userdebug
gsi_x86 х86 64 Да gsi_x86-user
gsi_x86-userdebug
gsi_x86_64 х86-64 64 Да gsi_x86_64-user
gsi_x86_64-userdebug

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

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

  1. Убедитесь, что устройство имеет следующее:
    • Утроено
    • Способ разблокировки устройств (чтобы их можно было прошить с помощью 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. Сотрите пользовательские данные и очистите данные других необходимых разделов (например, пользовательских данных и системных разделов):
    $ fastboot -w
  5. Перезагрузка:
    $ 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

Android приветствует ваш вклад в развитие GSI. Вы можете принять участие и помочь улучшить GSI:

  • Создание патча GSI. DESSERT -gsi не является веткой разработки и принимает только вишнёвые варианты из основной ветки AOSP, поэтому для отправки патча GSI необходимо:
    1. Отправьте патч в main ветку AOSP .
    2. Cherrypick патч для DESSERT -gsi .
    3. Сообщите об ошибке, чтобы получить возможность рассмотрения Cherrypick.
  • Сообщайте об ошибках GSI или вносите другие предложения. Прочтите инструкции в разделе «Отчеты об ошибках» , затем просмотрите или сохраните ошибки GSI .

Советы

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

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

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

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