Общий образ системы (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 имеет следующую конфигурацию:
- Высокие частоты. 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 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
из GSIsystem.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, используйте устаревший GSIaosp_$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
).
Изменения в 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 с веб-сайта непрерывной интеграции (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 за подробными инструкциями по перепрошивке. Используйте следующие шаги в качестве общего руководства:
- Убедитесь, что устройство имеет следующее:
- Утроено
- Способ разблокировки устройств (чтобы их можно было прошить с помощью
fastboot
) - Разблокированное состояние, позволяющее его прошивать через
fastboot
(чтобы убедиться, что у вас установлена последняя версияfastboot
, создайте ее из дерева исходного кода Android).
- Сотрите текущий системный раздел, затем перепрограммируйте GSI в системный раздел.
- Сотрите пользовательские данные и очистите данные других необходимых разделов (например, пользовательских данных и системных разделов).
- Перезагрузите устройство.
Например, чтобы прошить GSI на любое устройство Pixel:
- Загрузитесь в режим
fastboot
и разблокируйте загрузчик . - Устройства, поддерживающие
fastbootd
также должны загрузиться вfastbootd
следующим образом:$ fastboot reboot fastboot
- Сотрите и прошейте GSI в системный раздел:
$ fastboot erase system $ fastboot flash system system.img
- Сотрите пользовательские данные и очистите данные других необходимых разделов (например, пользовательских данных и системных разделов):
$ fastboot -w
- Перезагрузитесь обратно в загрузчик:
$ fastboot reboot-bootloader
- Отключите проверку проверенной загрузки при прошивке предоставленного 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
Android приветствует ваш вклад в развитие GSI. Вы можете принять участие и помочь улучшить GSI следующим образом:
- Создание патча GSI.
DESSERT -gsi
не является веткой разработки и принимает только вишневые выборки из основной ветки AOSP, поэтому для отправки патча GSI необходимо:- Отправьте патч в
main
ветку AOSP . - Cherrypick патч для
DESSERT -gsi
. - Сообщите об ошибке, чтобы получить возможность рассмотрения Cherrypick.
- Отправьте патч в
- Сообщайте об ошибках GSI или вносите другие предложения. Ознакомьтесь с инструкциями в разделе «Сообщения об ошибках» , затем просмотрите или сохраните ошибки GSI .
Советы
Измените режим панели навигации с помощью adb
При загрузке с GSI режим панели навигации настраивается поставщиком. Вы можете изменить режим панели навигации, выполнив следующую команду adb во время выполнения.
adb exec-out cmd overlay enable-exclusive com.android.internal.systemui.navbar.mode
mode может быть threebutton
, twobutton
, gestural
и т. д.