Динамические обновления системы в Android Вопрос: Как Project Treble улучшит будущие версии Android

Google представила Dynamic System Update — новый способ установки GSI в Android Q, не требующий разблокировки загрузчика.

Одновременно с выпуском Android 8.0 Oreo компания Google представила Проект Требл: серьезная переработка способа взаимодействия платформы ОС Android, HAL поставщика и ядра Linux. Treble — это крупная инициатива, направленная на уменьшение версии платформы Android и фрагментация исправлений безопасности, а все устройства под брендом Android, запускаемые с Android Pie, должны поддерживать Project Treble. OEM-производители и поставщики проверяют совместимость Treble, загружая универсальный образ системы (GSI) — чистую стандартную сборку Android от AOSP — и передавая Набор тестов для поставщиков (VTS) и комплект тестов на совместимость с общим образом системы (CTS-on-GSI). GSI оказался полезным не только для того, чтобы дать возможность инженерам-программистам, работающим на OEM-производителей, протестировать совместимость Treble, но и открыть двери для большое сообщество пользовательских ПЗУ

на XDA. В выпуске Android Q Google хочет сделать GSI полезными для другой группы: разработчиков приложений.

Поскольку первая стабильная версия и исходный код любой конкретной версии платформы Android обычно выходят в августе, разработчикам, которые хотят протестировать следующую версию Android на реальном устройстве, обычно требуется доступ к смартфону Google, если они не хотят ждать, пока обновление достигнет их собственного оборудования. Тем не менее, Google работал с OEM-производителями, чтобы создать Android P бета-версия на несколько устройств в прошлом году, а в этом году они продолжили эту тему, выпустив Android Q бета-версия. Помимо официальной бета-версии Android Q, Google в этом году также выпустила официальная бета-версия Q GSI поэтому любой разработчик, имеющий устройство, совместимое с Project Treble, может установить последнюю версию Q, не дожидаясь нескольких месяцев, пока сборка достигнет их устройств. Этот новый способ тестирования следующей версии Android дает разработчикам больше возможностей и, следовательно, больше времени для тестирования своих приложений. основные изменения в Android.

К сожалению, нынешний метод установка GSI может быть сложно. Для этого требуется разблокировать загрузчик — что означает удаление всех пользовательских данных и/или аннулирование гарантии — и прошить образ по протоколу fastboot. Это не быстрый и простой процесс для разработчика приложения, если его устройство даже позволяет разблокировать загрузчик. Вот почему, для последние несколько месяцев, Google разработала новый способ загрузки GSI. Введите новую функцию под названием «Динамическое обновление системы» или DSU.

(Ранее эта функция разрабатывалась под названиями «Живое изображение», «Динамический Android» и «Android on Tap», поэтому не удивляйтесь, если через несколько недель или месяцев Google назовет ее как-нибудь по-другому.)

Динамические обновления системы в Android Q

Цель функции DSU — позволить разработчику загрузиться в GSI, не мешая текущей установке. Это означает, что загрузчик не нужно разблокировать и стирать пользовательские данные. Процесс установки также значительно упрощен, поскольку Google предоставил интерфейс командной строки через ADB и приложение, которым можно управлять с помощью намерений. Вот как выглядит загрузка GSI с помощью DSU:

В этом видео* Google Pixel 3 XL под управлением Android Q beta 3 перезагружается в GSI. В этой среде разработчик приложения может установить и протестировать свое приложение на совместимость с Q API. По завершении тестирования они могут просто перезагрузиться обратно в обычное программное обеспечение Q beta 3 на устройстве. По сути, вы выполняете двойную загрузку GSI, чтобы можно было безопасно протестировать свое приложение!

*Мы записали это видео на Google I/O 2019, когда DSU еще не был общедоступным, поэтому сборка Q beta 3 на основе снятого Pixel 3 XL была немного изменена Google, чтобы включить поддержку DSU. Устройства под управлением Q beta 4 и более поздних версий имеют право на поддержку DSU, если они соответствуют приведенным ниже требованиям.

Требования к динамическим обновлениям системы

Наладить и запустить то, что по сути представляет собой двойную загрузку, было непростой задачей для Google. Существенные изменения пришлось внести в способ управления разделами на Pixel 3, тестовом стенде Google для DSU. Таким образом, первое важное требование для поддержки DSU заключается в том, что устройство поддерживает динамические разделы. Динамические разделы включают в себя один реальный раздел хранилища, который разделен на логические разделы изменяемого размера, такие как система, поставщик, odm, OEM, продукт и т. д. Во время установки GSI пространство резервируется для новых разделов системы и пользовательских данных путем взятия неиспользуемых блоков из существующего раздела пользовательских данных. Поскольку размер этих новых разделов может составлять несколько гигабайт, поддержка DSU имеет смысл только при логических разделах. разделы, иначе устройству придется постоянно зарезервировать несколько гигабайт дискового пространства для GSI. установки.

Другие требования включают в себя виртуальный диск, который решает, следует ли загружаться с раздела восстановления, системы или логического раздела, а также раздел метаданных для хранения метаданных GSI. В целом, строительными блоками поддержки DSU являются требования к запуску Android Q.Об этом сообщил руководитель Project Treble Илиян Малчев. Мы не уверены, если все это необходимо для поддержки DSU и является требованием для запуска Android Q, но мы можем предположить, что большинство, если не все, устройств запускаются с Android Q. может поддерживать DSU, даже если Google в настоящее время этого не требует. На данный момент только Pixel 3, Pixel 3 XL, Pixel 3a и Pixel 3a XL имеют динамические разделы, и из этих устройств только Pixel 3 и Pixel 3 XL поддерживают DSU в Android Q beta 4. Хотя поддержка DSU не требуется, Google надеется, что OEM-производители все равно включат эту функцию, поскольку она упрощает безопасное тестирование совместимости Treble. Например, инженер-программист OEM может установить GSI на SD-карте чтобы они могли быстро загрузиться на нескольких устройствах и проверить совместимость Treble.

Безопасность для динамических обновлений системы

Поскольку DSU, по сути, представляет собой вторую операционную систему, Google необходимо убедиться, что эту новую установку нельзя подделать, чтобы нарушить целостность устройства. Таким образом Для установки GSI предусмотрены те же базовые меры безопасности, что и в исходной установке.: политики Android Verified Boot и SELinux. Кроме того, только приложения с подписью INSTALL_DYNAMIC_SYSTEM|привилегированным разрешением могут инициировать GSI. установка, в то время как приложения с разрешением подписи MANAGE_DYNAMIC_SYSTEM могут включать/отключать или стирать GSI. монтаж. Это означает, что с DSU могут работать только надежные приложения системного уровня.

Чтобы обеспечить защиту исходных пользовательских данных, Google добавил дополнительный механизм защиты в Андроиде К. Называется "Контрольно-пропускной пункт», эта функция защищает от уничтожения пользовательских данных, восстанавливая разделы с контрольными точками в исходное состояние. Однако контрольные точки полезны не только для DSU. Они также используются для защиты от неудачных Основная линия проекта модуль APEX и А/Б ОТА-обновления. (Устройства с разделами A/B уже есть защита от отката, но эти откаты требуют сброса заводских данных, а контрольные точки пользовательских данных — нет.)

Установка GSI

Если ваше устройство поддерживает DSU, как серия Pixel 3, установить GSI несложно. Сначала вам необходимо убедиться, что флаг функции «Динамическая система» включен одним из двух способов:

  1. Если вы используете сборку userdebug, включите флаг settings_dynamic_android в меню «Настройки» > «Система» > «Параметры разработчика» > «Флаги функций».
  2. Если вы используете пользовательскую сборку, выполните следующую команду оболочки adb:
    setproppersist.sys.fflag.override.settings_dynamic_system 1

Затем загрузите последнюю бета-версию Android Q GSI с сайта Google или OEM-производителя вашего устройства. (DSU позволяет устанавливать только GSI, подписанные Google или OEM.) После загрузки используйте симг2имг для преобразования разреженного изображения в необработанное изображение. Используйте gzip, чтобы упаковать необработанное изображение, а затем скопируйте полученный архив в папку на вашем устройстве. внешнее хранилище (например, /data/media/0/Download) или фактический внешний носитель данных (например, физическая SD-карта). карта). Наконец, запустите приложение DynamicSystemInstallationService с правильным намерением начать установку:

adb shell am start-activity \ -n com.android.dynsystem/com.android.dynsystem.VerificationActivity \ -a android.os.image.action.START_INSTALL \ -d file:///storage/emulated/0/Download/system_raw.gz \ --el KEY_SYSTEM_SIZE $(du -b system_raw.img|cut -f1) \ --el KEY_USERDATA_SIZE 8589934592

Как только вы нажмете «Перезапустить», вы загрузитесь в GSI. Удобство использования устройства в GSI зависит от того, насколько хорошо OEM-производитель вашего устройства реализовал Treble (точнее, насколько мало они нарушили Treble). совместимость.) Некоторые устройства будут работать с GSI лучше, чем другие, но в целом не рассчитывайте использовать эту установку в качестве ежедневного использования. Водитель. Вы должны протестировать свое приложение, а затем выйти, перезагрузив его. Если вы хотите остаться в установке GSI для дальнейшего тестирования, вы можете использовать gsi_tool команда оболочки.

Полные инструкции по установке GSI для DSU можно найти. здесь. Ошибки можно сообщать на Трекер проблем Google,Реддит, или Переполнение стека.

Причина динамических обновлений системы

Когда я разговаривал с Илияном Малчевым в Google I/O, он повторил то, что сказал Хун-ин Тянь из команды Treble о раннем доступе к GSI на Ноябрьский саммит Android-разработчиков. Google сделал DSU, чтобы получить обратную связь от как можно более широкой аудитории. Цель состоит в том, чтобы улучшить качество GSI, что, в свою очередь, улучшает качество будущей версии Android поскольку GSI — это самая чистая форма Android. Google в настоящее время является единственной компанией, которая тестирует совместимость следующей версии GSI (например, насколько хорошо образ системы Android Q работает поверх Android P). реализации поставщика), но по мере того, как все больше людей прошивают GSI и оставляют отзывы, OEM-производители могут исправить нарушения совместимости Treble, поэтому GSI будут работать еще лучше в будущее. Илиян говорит, что OEM-производители и поставщики, такие как Qualcomm, проявляют большой интерес к повторному использованию образов поставщиков из предыдущей версии Android с образом системы следующей версии. Такие инициативы, как DSU, помогают Google и OEM-производителям восполнить пробел в охвате автоматических тестов, таких как VTS и CTS-on-GSI. Таким образом, Google привлекает больше бета-тестеров, которые оставляют отзывы о следующей версии Android, а также узнают о нарушениях совместимости Treble, чтобы OEM-производители могли улучшить свою работу.

Добавление динамических обновлений системы в Android Q приветствуется, но это не будет решение с двойной загрузкой, на которое некоторые из вас надеются. Как упоминалось ранее, можно установить только образы системы, подписанные Google или OEM-производителями. Когда я спросил Илияна о возможности расширения DSU для поддержки экосистемы альтернативного Android систем, он сказал, что это технически возможно, поскольку DSU — это просто канал доставки системы изображений. Любой OEM-производитель может использовать его по своему усмотрению. при условии, что конечный результат совместим с Android. Google не создал здесь альтернативы системе OTA, а DSU не предназначен для использования для настоящей двойной загрузки. Тем не менее, работа, проделанная Google над Treble, делает Android более модульным, поэтому я не удивлюсь, если встроенная двойная загрузка станет реальностью в будущем.