Общий образ системы (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:
- Высокие частоты. GSI полностью поддерживает архитектурные изменения на основе AIDL/HIDL (также известные как Treble), включая поддержку интерфейсов AIDL и интерфейсов HIDL. GSI можно использовать на любом устройстве Android с интерфейсами поставщика AIDL/HIDL. (Дополнительную информацию можно найти в разделе Ресурсы по архитектуре.)
- Файловая система. В GSI используется файловая система ext4.
Текущая версия 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из GSIsystem.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, используйте устаревший образ GSIaosp_$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-usergsi_arm-userdebug |
gsi_arm64 |
ARM64 | 64 | Г | gsi_arm64-usergsi_arm64-userdebug |
gsi_x86 |
x86 | 32 | Г | gsi_x86-usergsi_x86-userdebug |
gsi_x86_64 |
x86-64 | 64 | Г | gsi_x86_64-usergsi_x86_64-userdebug |
Требования к прошивке образов GSI
Устройства Android могут иметь разный дизайн, поэтому нет универсальной команды или набора инструкций для установки GSI, которые подходили бы для всех устройств. Чтобы узнать, как это сделать, обратитесь к производителю устройства Android. Следуйте общим рекомендациям ниже.
- Убедитесь, что на устройстве есть:
- Treblized
- Способ разблокировки устройств (чтобы их можно было прошить с помощью
fastboot). - Разблокированное состояние, чтобы его можно было прошить с помощью
fastboot. Чтобы у вас была последняя версияfastboot, соберите ее из дерева исходного кода Android.
- Удалите текущий системный раздел, а затем перенесите GSI в системный раздел.
- Удалите пользовательские данные и очистите данные из других необходимых разделов (например, пользовательских данных и системных разделов).
- Перезагрузите устройство.
Например, чтобы установить образ GSI на любое устройство Pixel, выполните следующие действия:
- Загрузите устройство в режиме
fastbootи разблокируйте загрузчик операционной системы. - Устройства, поддерживающие
fastbootd, также должны загружаться вfastbootd, выполняя следующие действия:$ fastboot reboot fastboot
- Очистите системный раздел и запишите на него GSI:
$ fastboot erase system $ fastboot flash system system.img
- Если ваше устройство поддерживает Android Virtualization 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
Мы будем рады, если вы внесете свой вклад в разработку GSI. Вы можете помочь нам улучшить GSI, выполнив следующие действия:
- Как создать исправление для образа системы
DESSERT-gsiне является ветвью разработки и принимает только исправления из последней ветви AOSP (android17-release). Чтобы отправить исправление GSI, выполните следующие действия:- Отправьте исправление в ветку AOSP
android17-release. - Перенесите исправление в ветку
DESSERT-gsi. - Сообщите об ошибке, чтобы мы проверили выборочный перенос.
- Отправьте исправление в ветку AOSP
- Сообщать об ошибках и отправлять другие предложения. Ознакомьтесь с инструкциями в разделе Как сообщать об ошибках, а затем найдите или создайте ошибку GSI.
Советы
Как изменить режим панели навигации с помощью adb
При загрузке с GSI режим панели навигации настраивается с помощью переопределения поставщика. Вы можете изменить режим панели навигации, выполнив следующую команду adb во время выполнения.
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
где mode может быть threebutton, twobutton, gestural и т. д.