Установка GSI-образа на устройство без поддержки Project Treble почти гарантированно заканчивается bootloop — телефон зависает на логотипе загрузчика, потому что системный раздел не может связаться с vendor-разделом без стандартизированного интерфейса. Именно поэтому разработка и портирование GSI прошивок начинается не с кастомизации Android, а с проверки архитектуры устройства и соответствия требованиям Treble. Без этой базы любые правки системного образа бессмысленны.
GSI (Generic System Image) — это «чистый» системный образ Android, способный загружаться на любом совместимом устройстве независимо от производителя. В этой статье разберём, как устроена GSI, как собрать собственный образ из исходников AOSP, как портировать готовую GSI под конкретное устройство и какие ошибки встречаются чаще всего.
Что такое GSI и как работает Project Treble
До появления Project Treble системный раздел Android был жёстко связан с драйверами и библиотеками производителя. Любое обновление системы требовало переработки vendor-компонентов, поэтому кастомные прошивки собирались индивидуально под каждую модель. Treble разделил систему и vendor-часть стандартизированным интерфейсом — HIDL и позже AIDL, а также VNDK для библиотек.
Благодаря этому разделению Generic System Image может работать поверх чужого vendor-раздела, если оба соблюдают контракт интерфейсов. Проверить наличие Treble на устройстве можно через ADB:
adb shell getprop ro.treble.enabled
Значение true означает базовую совместимость. Дополнительно стоит проверить архитектуру процессора и тип разметки разделов — от этого зависит, какой вариант GSI (arm64, a-only или AB) подойдёт конкретному аппарату.
- 📱 arm64 — самая распространённая архитектура современных устройств;
- 🔀 AB (seamless updates) — устройства с двумя слотами разделов A и B;
- 📦 a-only — классическая разметка с одним system-разделом;
- 🧩 system-as-root — схема, при которой system монтируется как корневой раздел.
Проверка совместимости устройства перед портированием
Прежде чем портировать или собирать GSI, необходимо собрать технический паспорт устройства. Начните с архитектуры: команда adb shell getprop ro.product.cpu.abi покажет, нужен ли образ arm64 или устаревший arm. Затем проверьте поддержку AB-разметки через ro.build.ab_update.
Несовпадение типа разметки — одна из самых частых причин неудачной прошивки. Образ для a-only, записанный на AB-устройство (или наоборот), просто не смонтируется корректно. Также уточните, использует ли аппарат dynamic partitions — на таких устройствах system-раздел находится внутри super-раздела, и прошивка выполняется иначе, чем на старых схемах.
⚠️ Внимание: разблокировка загрузчика — обязательное условие для установки GSI. На большинстве устройств эта операция стирает все пользовательские данные и может аннулировать гарантию. Сделайте резервную копию до начала работ.
Результаты проверки удобно свести в таблицу и сверять с требованиями конкретной GSI-сборки:
| Параметр | Команда проверки | Что определяет |
|---|---|---|
| Treble | getprop ro.treble.enabled | Базовую совместимость с GSI |
| Архитектура | getprop ro.product.cpu.abi | Вариант образа (arm64/arm) |
| AB-разметка | getprop ro.build.ab_update | Тип разделов (A/B или a-only) |
| System-as-root | getprop ro.build.system_root_image | Схему монтирования system |
| VNDK-версия | getprop ro.vndk.version | Совместимость vendor-библиотек |
Инструменты и подготовка среды разработки
Для сборки GSI из исходников потребуется Linux-машина (чаще всего используют Ubuntu LTS), значительный объём оперативной памяти и свободного дискового пространства — исходный код AOSP вместе с результатом сборки занимает сотни гигабайт. Точные требования зависят от версии Android, поэтому сверяйтесь с официальной документацией AOSP для выбранной ветки.
Базовый набор инструментов включает repo для синхронизации исходников, Android SDK Platform-Tools (fastboot и adb) для прошивки и отладки, а также компиляторы и библиотеки, перечисленные в документации AOSP. Для портирования готовых образов дополнительно пригодятся утилиты распаковки и перепаковки образов, например инструменты для работы с sparse image и payload.bin.
Если цель — не полная сборка, а портирование существующей GSI, объём работы заметно меньше: достаточно рабочего окружения с fastboot, инструментами монтирования образов и редактором файловых систем ext4/erofs. Однако и здесь без Linux-окружения обойтись сложно — большинство скриптов porting-сообществ написаны под него.
Сборка GSI из исходников AOSP
Полная сборка начинается с инициализации репозитория нужной ветки Android и синхронизации исходников через repo sync. Затем выбирается цель сборки — для GSI это специальные target-конфигурации вроде aosp_arm64. Процесс выглядит так:
source build/envsetup.sh
lunch aosp_arm64-userdebug
make systemimage -j$(nproc)
Результатом будет файл system.img в выходном каталоге сборки. Именно он прошивается в system-раздел устройства. На этом этапе в образ можно вносить собственные изменения: патчи фреймворка, предустановленные приложения, модифицированные настройки по умолчанию.
Важный нюанс: «голая» сборка AOSP не содержит проприетарных компонентов Google (GMS). Если они нужны, их интегрируют отдельно, и это отдельная задача со своими лицензионными и техническими ограничениями. Многие разработчики GSI поставляют две версии образа — с GMS и без.
Портирование GSI под конкретное устройство
Портирование отличается от сборки тем, что за основу берётся уже готовый образ, который адаптируется под особенности конкретного vendor-раздела. Типичный рабочий процесс выглядит так: сначала на устройство прошивается стоковая (или минимально модифицированная) GSI, фиксируются неработающие функции, затем проблемы устраняются точечными правками.
☑️ Порядок портирования GSI
Чаще всего портирование сводится к работе с overlay-файлами (настройки яркости, разрешений, энергосбережения), правке build.prop и добавлению устройство-специфичных библиотек из стоковой прошивки. Некоторые проблемы — например, неработающий сканер отпечатков или камера — решаются подменой соответствующих HAL-компонентов, но это уже требует глубокого понимания vendor-интерфейсов конкретной модели.
⚠️ Внимание: прошивка модифицированных образов может привести к состоянию soft-brick, когда устройство не загружается в систему. Перед экспериментами убедитесь, что у вас есть способ вернуть стоковую прошивку — заводской образ и рабочий доступ к fastboot или режиму восстановления производителя.
Прошивка самого образа обычно выполняется через fastboot:
fastboot flash system system.img
fastboot -w
fastboot reboot
Команда fastboot -w очищает userdata — без сброса данных после смены системного образа устройство часто не загружается из-за конфликта настроек. На устройствах с dynamic partitions порядок действий отличается: образ прошивается в fastbootd-режиме внутри super-раздела, и точную процедуру нужно смотреть в документации или ветках сообщества по конкретной модели.
Почему GSI загружается, но не работает звук или мобильная сеть
Наиболее вероятная причина — несовпадение vendor-интерфейсов. GSI рассчитана на стандартный HIDL/AIDL-контракт, но производители иногда расширяют его собственными вызовами. Проверьте логи через adb logcat на предмет ошибок аудио-HAL и RIL, сравните версию VNDK образа с версией vendor-раздела устройства. Часто помогает подбор GSI под правильную версию VNDK.
Типичные ошибки и их диагностика
Почти все проблемы с GSI делятся на три группы: устройство не загружается, система загружается с неработающими функциями, либо работает нестабильно. Для диагностики первого случая главный инструмент — логи загрузки: если устройство позволяет, снимите adb logcat на ранней стадии или изучите pstore/ramoops, если ядро его поддерживает.
- 🔄 Bootloop — чаще всего несовпадение типа разметки, SELinux-конфликты или несовместимость версии vendor;
- 📵 Нет сети/звонков — проблемы с RIL, несовпадение радио-интерфейсов vendor;
- 📷 Не работает камера — отсутствуют или конфликтуют camera-HAL библиотеки;
- 🔋 Быстрый разряд — отсутствуют overlay-настройки энергосбережения под конкретное железо.
Методичность здесь важнее скорости: меняйте по одному параметру за итерацию и фиксируйте результат. Попытка исправить несколько проблем одной перепрошивкой почти всегда приводит к невозможности понять, какая именно правка сработала или сломала систему. Ведите журнал изменений — это стандартная практика в сообществах портирования.
Тестирование и публикация сборки
Google предусмотрел формальный механизм проверки GSI — наборы тестов CTS-on-GSI и VTS, которые проверяют соответствие образа и vendor-раздела требованиям совместимости. Для любительских сборок полный прогон тестов необязателен, но базовый чек-лист проверить стоит: звонки, мобильный интернет, Wi-Fi, Bluetooth, камера, датчики, воспроизведение звука и видео, работа биометрии.
При публикации сборки указывайте архитектуру, тип разметки, версию VNDK и перечень известных неработающих функций. Честное описание ограничений экономит время и вам, и пользователям: большинство негативных отзывов на GSI-сборки связано не с ошибками разработчика, а с установкой образа на несовместимое устройство.
Часто задаваемые вопросы
Можно ли установить GSI на устройство без Project Treble?
Нет, полноценная установка GSI невозможна без Treble — системный раздел не сможет взаимодействовать с vendor-компонентами. Для старых устройств существуют только модифицированные кастомные прошивки, собранные специально под модель, но это уже не GSI.
Чем GSI отличается от обычной кастомной прошивки?
Кастомная прошивка собирается под конкретную модель и включает device-specific ядро и vendor-часть. GSI — универсальный системный образ, который работает поверх штатного vendor-раздела любого Treble-совместимого устройства. Поэтому одна и та же GSI может загружаться на десятках разных моделей.
Устройство ушло в bootloop после прошивки GSI. Что делать?
Сначала проверьте, соответствует ли образ архитектуре и типу разметки устройства — это самая частая причина. Затем попробуйте прошить образ заново с очисткой userdata (fastboot -w). Если не помогло, верните стоковую прошивку через заводской образ и fastboot либо фирменную утилиту производителя.
Нужен ли root для установки GSI?
Нет, root-права для прошивки GSI не требуются — достаточно разблокированного загрузчика и доступа к fastboot. Root нужен только для отдельных модификаций уже установленной системы.
Будут ли работать сервисы Google на GSI?
Только если они интегрированы в конкретную сборку. Чистый образ AOSP не содержит GMS, поэтому разработчики обычно выпускают отдельные варианты с предустановленными сервисами Google. Перед установкой проверяйте описание сборки.