Универсальный образ системы (GSI) — это образ системы с адаптированными конфигурациями для устройств Android. Он считается чистой реализацией Android с неизмененным кодом Android Open Source Project (AOSP), который может успешно работать на любом устройстве Android под управлением Android 9 или выше.
GSI-файлы используются для запуска тестов VTS и CTS-on-GSI. Образ системы Android-устройства заменяется GSI-файлом, а затем тестируется с помощью набора тестов поставщика (VTS) и набора тестов совместимости (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 для тестов на соответствие стандарту Treble.
Индекс GSI, используемый для тестирования на соответствие стандартам, определяется версией Android, с которой устройство было выпущено.
| Тип устройства | Цель сборки |
|---|---|
| Устройства, запускаемые с Android 15 | gsi_$arch-user (Signed) |
| Устройства, запускаемые с Android 14 | gsi_$arch-user (Signed) |
| Устройства, запускаемые с Android 13. | gsi_$arch-user (Signed) |
| Устройства, выпускаемые с Android 12L | gsi_$arch-user (Signed) |
| Устройства, запускаемые с Android 12 | gsi_$arch-user (Signed) |
| Устройства, запускаемые с Android 11 | gsi_$arch-user (Signed) |
Все GSI-файлы созданы на основе кода Android 12, и для каждой архитектуры ЦП существует соответствующий исполняемый файл GSI (см. список целей сборки в разделе «Создание 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, которые не полностью оптимизированы для Treblized.
- Политика отладки пользователя (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 с использованием отладочного оперативного диска» .
Изменения в GSI Android 11
Устройства, выпущенные с Android 11 или обновленные до этой версии, должны использовать GSI-образы Android 11 для тестирования на соответствие стандартам. Это включает в себя следующие основные изменения по сравнению с более ранними GSI-образами:
- Содержимое system_ext. Android 11 определяет новый раздел
system_ext. GSI помещает содержимое системных расширений в папкуsystem/system_ext. - Файлы APEX. GSI содержит как сжатые, так и сглаженные файлы APEX. Какой из них использовать, определяется системным свойством
ro.apex.updatableв разделе поставщика во время выполнения. Подробную информацию см. в разделе « Настройка системы для поддержки обновлений APEX» .
Изменения в GSI Android 10
Устройства, выпущенные с предустановленной или обновленной до Android 10, должны использовать GSI-образы Android 10 для тестирования на соответствие стандартам. Это включает в себя следующие основные изменения по сравнению с более ранними GSI-образами:
- Пользовательская сборка. GSI содержит пользовательские сборки из Android 10. В Android 10 пользовательская сборка GSI может использоваться для тестирования на соответствие стандартам CTS-on-GSI/VTS. Подробности см. в разделе «Тестирование VTS с использованием отладочного оперативного диска» .
- Неразреженный формат. GSI-файлы с целевыми объектами
aosp_$archсоздаются в неразреженном формате. При необходимости вы можете использоватьimg2simgдля преобразования неразреженного GSI-файла в разреженный формат. - Система с правами root. Устаревшая цель сборки GSI с именем
aosp_$arch_aбыла выведена из эксплуатации. Для устройств, обновленных с Android 8 или 8.1 до Android 10 с использованием ramdisk и без прав root, используйте устаревшую цель GSIaosp_$arch_ab. Обновленнаяinitв ramdisk поддерживает образ системы OEM с разметкой для прав root. - Проверка загрузки. При использовании GSI вам нужно только разблокировать устройство. Отключать проверку загрузки нет необходимости.
Изменения в 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).
Изменения в 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-файлы можно загрузить с веб-сайта непрерывной интеграции AOSP (CI) по адресу 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-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. Следующие шаги являются общим руководством:
- Убедитесь, что устройство обладает следующими характеристиками:
- Треблированный
- Способ разблокировки устройств (чтобы их можно было прошивать с помощью
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, прошейте защищенную виртуальную машину (Protected Virtual Machine Firmware):
$ 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 в этом примере.Внесите свой вклад в работу ассистентов преподавателя.
Android приветствует ваш вклад в разработку GSI. Вы можете принять участие и помочь улучшить GSI, выполнив следующие действия:
- Создание GSI-патча.
DESSERT -gsiне является веткой разработки и принимает только cherrypicks из последней ветки релизов AOSP (android17-release), поэтому для отправки GSI-патча необходимо:- Отправьте патч в ветку AOSP
android17-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 и так далее.