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

Общий образ системы (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» ).

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

Устройства, запускаемые с 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 РУКА 32 Да gsi_arm-user
gsi_arm-userdebug
gsi_arm64 ARM64 64 Да gsi_arm64-user
gsi_arm64-userdebug
gsi_x86 х86 32 Да 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 и т. д.