Общий образ системы (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 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
из 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
).
Изменения 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 за подробными инструкциями по перепрошивке. Используйте следующие шаги в качестве общего руководства:
- Убедитесь, что устройство имеет следующее:
- Утроено
- Способ разблокировки устройств (чтобы их можно было прошить с помощью
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
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 необходимо:- Отправьте патч в
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
и т. д.