Динамични системни актуализации в Android Q: Как Project Treble ще подобри бъдещите версии на Android

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

Успоредно с пускането на Android 8.0 Oreo, Google представи Проект Treble: основно преструктуриране в начина, по който комуникират рамката на Android OS и HAL на доставчика и ядрото на Linux. Treble е основна инициатива, предназначена да намали версията на платформата Android и фрагментация на корекция за сигурности всички устройства с марка Android, стартиращи с Android Pie, трябва да поддържат Project Treble. OEM производителите и доставчиците тестват Treble съвместимостта чрез зареждане на Generic System Image (GSI) – чиста стокова компилация на Android от AOSP – и предаване на Пакет за тестване на доставчик (VTS) и Compatibility Test Suite-on-Generic System Image (CTS-on-GSI). GSI се оказа полезен не само като позволява на софтуерните инженери, работещи за OEM производители, да тестват съвместимостта на Treble, но също така отвори вратата за голяма персонализирана ROM общност

на 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 може да бъде трудно. Това изисква отключване на буутлоудъра - което означава изтриване на всички потребителски данни и/или анулиране на гаранцията - и флашване на изображение чрез протокола за бързо зареждане. Това не е бърз и лесен процес за разработчика на приложение, ако устройството му дори позволява отключване на буутлоудъра. Ето защо, за последните няколко месеца, Google работи върху нов начин за зареждане на GSI. Въведете нова функция, наречена Dynamic System Update или 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 инсталации.

Другите изисквания включват ramdisk, който решава дали да стартира възстановяване, система или логически дял, и дял с метаданни за съхраняване на метаданните на 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 добави допълнителен защитен механизъм в Android Q. Наречен "КПП," функцията предпазва от унищожаване на потребителски данни, като възстановява дяловете с контролни точки до първоначалното им състояние. Контролните точки обаче са полезни не само за DSU. Те се използват и за защита срещу неуспешни действия Основна линия на проекта APEX модул и A/B OTA актуализации. (Устройства с A/B дялове вече имат защита срещу връщане назад, но тези връщания изискват нулиране на фабричните настройки, докато контролните точки на потребителските данни не.)

Инсталиране на GSI

Ако вашето устройство поддържа DSU като серията Pixel 3, тогава е лесно да инсталирате GSI. Първо трябва да се уверите, че флагът на функцията Dynamic System е активиран по един от двата начина:

  1. Ако сте на компилация с userdebug, активирайте флага settings_dynamic_android в Settings > System > Developer options > Feature flags.
  2. Ако сте на потребителска компилация, изпълнете следната команда adb shell:
    setproppersist.sys.fflag.override.settings_dynamic_system 1

След това изтеглете най-новата версия на Android Q beta GSI от Google или OEM на вашето устройство. (DSU позволява инсталиране само на GSI, подписани от Google или OEM.) След като го изтеглите, използвайте simg2img за преобразуване на рядкото изображение в необработено изображение. Използвайте 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 shell команда.

Пълните инструкции за инсталиране на GSI за DSU могат да бъдат намерени тук. Бъгове могат да се подават на Google Issue Tracker,Reddit, или Препълване на стека.

Причината зад динамичните системни актуализации

Когато говорих с Илиян Малчев в Google I/O, той повтори казаното от Hung-ying Tyan от екипа на Treble относно ранния достъп до GSI на Ноемврийската среща на върха за Android Dev. 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 по-модулен, така че няма да се изненадам, ако нативното двойно зареждане стане реалност в бъдеще.