Project Mainline в Android 10

Вчера вышло очередное обновление ОС для мобильных устройств от Google. Одним из главных нововведений Android 10 стал «Project Mainline». Попробую разобраться что это, для чего и как работает.

В течение многих лет Google пытается решить проблему обновлений безопасности на Android. На текущий момент Android установлен на нескольких миллиардах устройств, но большинство производителей очень неохотно поддерживают устройства после выпуска. Это приводит к тому, что в эксплуатации находится множество устройств, на которых установлена версия с известными уязвимостями.

Первым большим шагом к упрощению обновления Android стал «Project Treble», который «разделил» Android на две части: аппаратно зависимую и независимую. Что облегчило выпуск обновлений до новых версий Android. Следующим большим шагом стал «Project Mainline». Он позволит обновлять отдельные компоненты операционной системы без обновления всей системы аналогично обновлению приложений.

Почему это понадобилось?


В архитектуре Android операционная система (часто ее называют прошивкой) жестко отделена от пользовательских данных и приложений. Она находится на отдельном разделе флеш памяти, доступна только для чтения и в последних версиях Android подписана электронной подписью для контроля целостности. Для приложений Android, входящих в состав операционной системы, возможно обновление с размещением новых версий приложений в пользовательском разделе памяти. Обновление других частей операционной системы (сервисы, библиотеки и т.д.), например с помощью пакетного менеджера, как на дистрибутивах Linux, было невозможно. Для таких исправлений производитель был вынужден выпускать обновление всей системы. При этом, при использовании сервисов Google Mobile Services (подавляющее большинство устройств их использует), каждое обновление требует сертификации в Google. И «Project Mainline» решает эту проблему, теперь компоненты системы можно обновлять по отдельности, аналогично Android приложениям. Кроме обновлений безопасности, он также упрощает обновление системных настроек и данных, например о часовых поясах (tzdata).

Как это работает


Основу «Project Mainline» составляет новый контейнер для системных приложений APEX (сокращение от Android Pony EXpress).

В Android 10 Google выделил в системе 13 APEX пакетов, которые можно обновлять независимо:


APEX пакеты можно устанавливать аналогично APK с помощью «установщика пакетов», adb или Google Play.

APEX


APEX файл похож на используемый для Andoird приложений APK.

APEX это zip архив, содержащий 4 основных файла:


С APEX пакетами работает системный сервис APEX manager (apexd).

APEX manager



Внутри образа из APEX пакета могут быть:


Подпись APEX пакета


APEX пакет подписывается два раза, двумя разными ключами. Одним ключом подписывается ext4 образ (используется dm-verity, как в Android Verified Boot), вторым ключом подписывается APEX пакет (zip-файл) аналогично APK пакету.

Linux kernel


Для работы APEX используется ряд механизмов Linux ядра, таких как loop-устройство, DM-verity.
Работа APEX поддерживается на ядре версии 4.4 и выше. Для устройств на более старых версия ядра, поддерживается только работа в «плоском» режиме, не поддерживающем обновление.

Ссылки:
android.googlesource.com/platform/system/apex/+/refs/heads/master/docs/README.md
android-developers.googleblog.com/2019/05/fresher-os-with-projects-treble-and-mainline.html
@vm03
04.09.2019 21:37 UTC
Первоисточник