Jak oddíly A/B a bezproblémové aktualizace ovlivňují vlastní vývoj na XDA

click fraud protection

O Seamless Updates jste již možná slyšeli. Zahrnuje něco, čemu se říká „oddíly A/B“. Co to je a jak to ovlivňuje vlastní vývoj na XDA?

Když byl vydán Android Nougat, mluvili jsme o tom všechny druhy nových funkcí. Získali jsme nově aktualizované uživatelské rozhraní pro začátečníky spolu s dlouho očekávanými funkcemi více oken a podporou Vulkan Graphics API. Většině uživatelů ale nad hlavami proletěl jeden přírůstek pod kapotou. Android Nougat představil „bezproblémové aktualizace“ na zařízeních, která podporují oddíly A/B. Naprostá většina stávajících zařízení se systémem Android (kromě nových Google Pixel a Google Pixel XL) v té době neměla oddíly A/B, a proto nemohla využívat bezproblémové aktualizace. Základním předpokladem této funkce je, že zařízení má druhou sadu systémových, spouštěcích, dodavatelských a dalších důležitých oddílů, a když získáte OTA aktualizace aktualizace probíhá na pozadí, zatímco druhá sada oddílů je opravena, což umožňuje bezproblémové restartování do aktualizovaného softwaru. Pokud se aktualizace nezdaří, budete vráceni zpět k funkčnímu sestavení, což znamená, že společnosti budou mít méně starostí a spotřebitelé budou lépe chráněni.

Podpora bezproblémových aktualizací není podmínkou pro žádné nové zařízení Android, na rozdíl od Project Treble. Naprostá většina nových zařízení Android proto tuto funkci nepodporuje. Seznam všech podporovaných zařízení zatím vedemea je jasné, že tato funkce není široce podporována. To je škoda, protože A/B oddíly přinášejí spoustu výhod jak pro běžné uživatele, tak pro pokročilé uživatele. Tato funkce má však v komunitě nadšenců trochu špatnou pověst, protože je vnímána jako ztížená pro vývoj Androidu a flashování vlastních úprav. Ve skutečnosti tomu tak není, takže jsme chtěli demystifikovat bezproblémové aktualizace a vysvětlit, jak oddíly A/B ovlivňují vlastní vývoj na XDA.

Mnohokrát děkuji Senior Member XDA npjohnson, a přispěvatel do LineageOS a udržovatel Motorola Moto Z2 Force, která nám pomohla ověřit tento článek.


Oddíly na zařízení Android

Oddíl je jednoduše samostatná sekce na interním úložišti telefonu, kde jsou uchovávána data. Jaký druh dat je uchováván na každém oddílu závisí na hardwaru, operačním systému a mnoha dalších faktorech. Bootloader bude mít jeden, systém (OS Android) jeden, uživatelská data budou mít jeden... a tak dále a tak dále. Když vidíte lidi mluvit o "/system" a "/cache", odkazují na daná jména těchto oddílů. OnePlus 6 má například 72 oddílů. To zní jako hodně, ale OnePlus 6 je jedním ze zařízení, které podporuje bezproblémové aktualizace, což znamená, že mnohé z těchto oddílů jsou jednoduše duplikáty.

Částečný výstup oddílů na OnePlus 6. Některé oddíly A/B jsou pro demonstrační účely podtržené.

Na zařízení je spousta oddílů, o které se jako uživatel nikdy nebudete muset starat. Mnoho z těchto oddílů se nikdy nezmění při flashování vlastních ROM, jader, obnovy nebo modifikací jako Magisk nebo Xposed. Mnoho z těchto oddílů bude pro naše účely buď nevyužito, nebo jsou příliš nebezpečné na dotyk, pokud nevíte, co děláte (XLOADER a OEMINFO na Huawei/Honor zařízení.) Pro drtivou většinu uživatelů Android jsou oddíly, se kterými se většinou zabýváme, systém, spouštění, obnovení, uživatelská data a v poslední době vbmeta. Zde je stručné vysvětlení účelu každého oddílu:

  • systém – obsahuje operační systém Android, systémové knihovny, systémové aplikace a další systémová média, jako jsou bootanimace, tapety na pozadí, vyzváněcí tóny atd.
  • boot - obsahuje jádro, ramdisk a na A/B zařízeních také obnovu
  • recovery – podrží obnovu, kde se TWRP nejčastěji flashuje na zařízeních typu A (zařízení A/B nemají vyhrazený oddíl pro obnovu)
  • uživatelská data – obsahuje všechna data vaší aplikace, systému a interního úložiště
  • prodejce – obsahuje HAL specifické pro platformu a zařízení, soubory nezbytné pro komunikaci OS Android se základním hardwarem
  • vbmeta – oddíl pro Android Verified Boot 2.0, který ověřuje integritu procesu spouštění

Výrobci OEM zařízení mohou změnit svá schémata oddílů tak, aby používali jakékoli rozložení, které chtějí. Huawei například rozděluje spouštěcí oddíl na ramdisk_recovery a kernel. Existuje také mnoho dalších oddílů, které mohou obsahovat další systémové aplikace, jako je cust, product a oem, a zatímco tyto lze bezpečně upravovat, obecně se to nedoporučuje, pokud si chcete usnadnit návrat na sklad. Kde tedy hrají roli A/B oddíly?


Schéma rozdělení A/B

Jak aktualizace fungují na zařízeních s bezproblémovými aktualizacemi

Velmi jednoduchý obrázek, který jsem vytvořil níže, ilustruje, jak probíhá aktualizace na zařízení s podporou oddílu A/B. Oddíl, který je zobrazen, je systémový oddíl, i když jiné oddíly, jako je boot a dodavatel, mohou být také aktualizovány jakoukoli danou aktualizací OTA od výrobce OEM. Tento proces aktualizace se děje nejen s hlavními aktualizacemi verzí systému Android, ale také s aktualizacemi bezpečnostních oprav.

  1. Začneme dvěma systémovými oddíly, system_a a system_b, oba na stejné verzi Androidu.
  2. Za předpokladu, že system_a je aktivní, OTA aktualizace opraví system_b, neaktivní oddíl, na pozadí.
  3. system_a je nastaven na neaktivní a system_b se stane aktivním, jakmile se uživatel restartuje.
  4. Nyní neaktivní oddíl system_a bude aktualizován, jakmile bude vydána další aktualizace OTA.

Jaké jsou výhody tohoto procesu aktualizace?

  1. Pokud se aktualizace nezdaří, zařízení se vrátí zpět do funkčního sestavení na druhém slotu.
  2. Vaše data zůstanou dokonale nedotčená, i když je aktualizace přerušena, protože existuje pouze jeden oddíl (uživatelská data), ve kterém jsou uložena vaše data.
  3. Streamování aktualizace: Pokud je váš datový oddíl plný, lze aktualizaci stáhnout a streamovat do neaktivního slotu. Je to docela elegantní funkce a znamená, že nemusíte plýtvat žádným dočasným úložištěm na aktualizace. To je důvod, proč na zařízeních A/B není žádný oddíl mezipaměti, protože již nejsou potřeba.

Jaký dopad má schéma rozdělení A/B na úložiště zařízení?

Znamená skutečnost, že bezproblémové aktualizace vedou k hromadě duplicitních oddílů, že přicházíte o spoustu úložného prostoru? Vůbec ne. Google říká, že zařízení s bezproblémovou podporou aktualizací by díky odstranění oddílů /cache a /recovery měla být mimo provoz jen o několik stovek megabajtů. Odstranění obou vyrovná náklady na přidání druhé sady oddílů. Podle Googlu je obraz A/B systému Pixel poloviční oproti obrazu systému A. Většina využití dodatečného úložiště ve skutečnosti pochází z přidání oddílu druhého dodavatele. To dává smysl, protože oddíl dodavatele obsahuje všechny proprietární binární soubory používané výrobci OEM (součást Project Treble), takže se očekává, že zabere docela dost místa. I když Google nedoporučuje rozdělování A/B na zařízení se 4 GB úložiště (protože je to téměř 10 % z celkového dostupného úložiště), doporučuje to na zařízeních s 8 GB a vyšší.

Zde je rozpis úložného prostoru použitého na Google Pixel s oddíly A/B a bez nich.

Velikosti oddílů

A/B

Pouze A

Zavaděč

50 MB*2

50 MB

Bota

32 MB*2

32 MB

Zotavení

32 MB

Mezipaměti

100 MB

Rádio

70 MB*2

70 MB

Prodejce

300 MB*2

300 MB

Systém

2048 MB*2

4096 MB

Celkový

5000 MB

4680 MB

Co se stalo s oddílem pro obnovení?

Základní linuxové jádro na zařízeních Android umožňuje Androidu správně rozpoznat a používat hardware na smartphonu. Na zařízeních Android typu A máte obecně dvě verze jádra: Jedna je zabalena v oddílu pro obnovení, zatímco druhá je ve spouštěcím oddílu. Na zařízeních A/B podporujících bezproblémové aktualizace je nyní obnova uvnitř zaváděcího obrazu spolu s jádrem. Hlavní funkcí obnovy byla instalace aktualizací, ale protože to řeší systém sám (update_engine) při spouštění systému Android již není vyhrazený oddíl pro obnovení potřeba.

Abychom mohli nainstalovat vlastní obnovu na zařízení A/B, musíme upravit spouštěcí oddíl a nahradit obnovu zásob vlastním. To je důvod, proč k instalaci TWRP musíte nejprve použít příkaz fastboot a spustit vlastní spouštěcí obraz pak flash instalační skript TWRP, protože fastboot nemůže záplatovat oddíly – pouze je celé problikne. Technicky můžete svůj stávající spouštěcí obraz předem upravit pomocí TWRP a poté jej flashnout pomocí rychlého spouštění, ale to je větší problém, než to stojí za to. Instalační skript TWRP opraví oddíly boot_a a boot_b, aby nainstaloval TWRP.

Zábavný fakt: Android update_engine, který se stará o bezproblémové aktualizace, je v podstatě ripován přímo z Chrome OS. Teprve nedávno byly z protokolu update_engine odstraněny řetězce obsahující „Chrome OS“, aby se předešlo zmatku pro každého, kdo náhodou kontroluje logcat.

Podporuje můj smartphone Android oddíly A/B pro bezproblémové aktualizace?

Zatímco my vést seznam všech zařízení které to podporují, můžete také snadno zkontrolovat sami.


Jak bezproblémové aktualizace ovlivňují vlastní vývoj?

Uživatelské vnímání A/B oddílů

Bezproblémové aktualizace, které mnozí uživatelé považují za překážku vývoje softwaru na zakázku, jsou ve skutečnosti pro vývojáře přínosem. Důvod, proč jsou A/B zařízení vnímána jako slabá vývojová podpora, spočívá v ceně prvních A/B zařízení. Koneckonců, zařízení Google Pixel byla jedny z prvních, které podporovaly bezproblémové aktualizace a ve srovnání se smartphony Nexus z minulých let byly poměrně drahé. Kromě toho, díky nesčetným vylepšením, která společnost Google provedla v operačním systému Android, který vytvořil vlastní ROM a modifikace méně populární na zařízeních Google, smartphony Google Pixel se na našich fórech neprosadily zdaleka tak dobře jako Nexus chytré telefony. Kombinace vnějších faktorů vedla k poklesu vlastního vývoje na chytrých telefonech Google Pixel, ačkoli většina uživatelů se místo toho rozhodla obviňovat podporu oddílu A/B. Porovnejte dostupnost vlastního vývoje na zařízeních, jako je Google Pixel, se zařízeními, jako je Xiaomi Mi A1 na našich fórech.

Navíc nedostatek porozumění tomu, jak A/B oddíly změnily způsob, jakým uživatelé potřebují instalovat vlastní ROM, jádra, obnovy a modifikace, vedl k tomu, že podpora A/B oddílů nebyla populární. Vzhledem k tomu, že obnova nyní žije uvnitř zaváděcího obrazu, může blikající modifikace ve špatném pořadí, jako je Magisk nebo Xposed, způsobit konflikty a může vést k bootloopu. V jakém pořadí tyto mody flashujete, může být důležité, i když v případě vlastních ROM byste si neměli dělat starosti s tím, do kterého slotu flashujete. Na rozdíl od všeobecného přesvědčení instalační skript pro většinu vlastních ROM nebliká do obou slotů. Většinou se o to nemusíte starat, protože byste neměli muset sloty vyměňovat ručně.

Jak vývojáři vidí oddíly A/B

Při sestavování ROM mohou vývojáři využít oba oddíly k testování samostatných sestavení. Pokud jeden nefunguje, mohou se prostě vrátit zpět k pracovnímu oddílu a znovu sestavit svou ROM. Vývojáři mohou také testovat regrese jednoduchou instalací aktualizace, přepnutím aktivního oddílu a porovnáním obou, aniž by museli vymazat data. Takto vidí tým LineageOS podporu oddílu A/B:

„Mnoho lidí v komunitě Android namítalo A/B jako ‚obtížné na podporu‘ a ‚nepřívětivé pro vývojáře‘, i když je ve skutečnosti správně implementováno. snadněji podporovat a stejně tak přátelské pro vývojáře." - jrizzoli, LineageOS Changelog 19

Počáteční potíže s podporou A/B pro vývojáře pocházely z úpravy jejich stávajících nástrojů pro podporu těchto zařízení. Vývojář Magisk, topjohnwu, přidal oficiální podporu pro Google Pixel rok po tom propuštěn – ne proto, že by to bylo obtížné, ale spíše proto, že mu trvalo rok, než se k němu skutečně dostal pracovat na. podpora TWRP přišlo docela rychle na A/B zařízeních poté, co se na to hlavní vývojář Dees_Troy vrhl. LineageOS 15.1 nyní podporuje Zařízení A/B poté, co si dobrovolníci našli čas opravit svůj skript addon.d.

Jak aktualizovat A/B zařízení, které má vlastní obnovu, jádro nebo jiné mody

Vlastní ROM

Blikající aktualizace na zařízení s vlastní ROM znamená, že si budete muset dávat pozor, který slot také flashujete, že? Ne tak docela. TWRP toho za vás ve skutečnosti zvládne hodně a výchozím nastavením je neaktivní slot pro flashování vlastní ROM. Pokud je váš aktivní slot A a flashujete vlastní ROM, ve skutečnosti flashujete do slotu B. Když restartujete, aktivní slot je nyní B. Vývojáři mohou upravit instalační skript a flashovat do obou slotů, aby to koncovému uživateli usnadnili, ačkoli většina vlastních instalačních skriptů ROM v současnosti flashuje pouze do jednoho slotu. A konečně, vlastní ROM mohou implementovat A/B updater do své ROM, takže uživatelé ani nemusí manuální aktualizace aktualizací – nejnovější LineageOS 15.1 obsahuje nástroj Lineage Updater a XDA Senior Member USA-RedDragon udělat generický A/B updater které mohou používat ostatní vývojáři.

Skladové ROMy

Není to ale problematické, pokud na vašem zařízení běží stock ROM s různými úpravami a chcete nainstalovat aktualizaci bez ztráty všech těchto modů? Může to být, pokud neznáte správné kroky k instalaci aktualizace. Na OnePlus 6 například nemůžete flashovat přírůstkové OTA na upraveném zařízení, protože přírůstkové OTA se pokusí opravit upravený spouštěcí obraz. Pravděpodobně tedy skončíte s bootloopem, a proto musíte provést flash úplnou aktualizaci ROM, abyste zcela přepsali upravený zaváděcí obraz. Zde jsou obecné kroky, které musíte provést, abyste si na svůj OnePlus 6 nainstalovali aktualizaci OxygenOS a zároveň si zachovali TWRP, Magisk a volitelně vlastní jádro.

  1. Staženo nejnovější plná ROM zip
  2. Flashujte celý zip ROM při obnově
  3. (Volitelné) Vlastní jádro Flash
  4. Flash TWRP instalační program
  5. Restartujte rovnou zpět k obnově
  6. Flash Magisk

Na zařízeních Google Pixel můžete flash tovární obraz bez vymazání dat, poté spusťte TWRP, nainstalujte TWRP pomocí instalačního skriptu a poté nainstalujte Magisk.

Extrahování aktualizace do flash obrazů jednotlivých oddílů

Aktualizační soubory pro mnoho zařízení A/B se ve srovnání se zařízeními typu A trochu liší. Už to nejsou jen soubory zip obsahující spoustu obrázků (s výjimkou továrních obrázků Google a Razer), místo toho jsou ve formě souboru payload.bin. Tento soubor můžete extrahovat a každou část flashovat ručně, ale vyžaduje to speciální nástroj. Pokud vás zajímá, jak to udělat na OnePlus 6, Xiaomi Mi A1 a mnoha dalších A/B zařízeních, čtěte dále.

Nastavení pro extrahování payload.bin

  1. Ujistěte se, že máte Python 3.6 nainstalováno.
  2. Stáhněte si payload_dumper.py a update_metadata_pb2.py tady.
  3. Extrahujte svůj OTA zip a umístěte payload.bin do stejné složky jako tyto soubory.
  4. Otevřete PowerShell, Příkazový řádek nebo Terminál v závislosti na vašem operačním systému.
  5. Zadejte následující příkaz: python -m pip install protobuf
  6. Po dokončení zadejte tento příkaz: python payload_dumper.py payload.bin
  7. Tím se začnou extrahovat obrázky ze souboru payload.bin do aktuální složky, ve které se nacházíte.

Pokud chcete, můžete nyní flashovat každý z těchto obrázků samostatně prostřednictvím rychlého spuštění. Následující část vám ukáže, jak na to.

Použití rychlého spuštění k flashování obrázků na zařízení, které podporuje plynulé aktualizace

Existuje řada příkazů, které jsou exkluzivní pro systémová zařízení oddílu A/B. Můžete změnit svůj aktivní slot a flash na konkrétní sloty. Pokud máte Project Treble-kompatibilní zařízení a chtějí se naučit, jak na to flash generické systémové obrázky, měli byste být obeznámeni s těmito příkazy. Podívejte se na tabulku níže.

Příkazy rychlého spuštění

Příkaz

Získejte aktuální aktivní slot

fastboot getvar all | grep "current-slot"Pokud používáte Windows PC, příkaz "grep" nebude fungovat.

Nastavte další slot jako aktivní

fastboot set_active other

Nastavit zadaný slot jako aktivní

fastboot set_active $ORfastboot --set-active=_$slot, kde $ je buď a nebo b

Flash obraz do určeného oddílu v aktuálním slotu

fastboot flash partition partition.img

Flash obraz do určeného oddílu v určeném slotu

fastboot flash partition_a partition.imgfastboot flash partition_b partition.img

(Poznámka: Na zařízeních A/B můžete buď určit oddíl v konkrétním slotu, do kterého se má flashovat, nebo můžete vynechat příponu slotu a bude blikat do aktuálního aktivního slotu. Například „partition“ v příkazu flash můžete nahradit „system“, „system_a“ nebo „system_b.“)

Na počítačích se systémem Windows nemůžete použít grep, takže stačí odstranit tuto část a hledat "current-slot".

Slovo o Project Treble a bezproblémových aktualizacích

Obvyklá mylná představa je, že podpora Project Treble a podpora oddílu A/B spolu souvisí, ale ve skutečnosti tomu tak není. Mít jedno ještě neznamená druhé. Motorola Moto Z2 Force používá schéma rozdělení A/B, ale nepodporuje výšky. Na druhou stranu Honor 9 Lite podporuje Project Treble, přesto je to zařízení typu A.

Honor 9 Lite podporuje Project Treble, ale nepodporuje plynulé aktualizace

Často kladené otázky/shrnutí

  • Jaké jsou výhody rozdělení A/B?
    • Rozdělení A/B vám umožňuje aktualizovat smartphone s Androidem při jeho používání a jednoduše jej restartovat, když jste připraveni zavést novou verzi. Funguje také jako ochrana proti cihlám – pokud se aktualizace nepovede, vrátíte se zpět k funkční instalaci.
  • Brání dělení A/B vývoji?
    • I když vývojářům trvalo trochu času, než se přizpůsobili, odpověď je v podstatě ne. Ve skutečnosti to může pomoci vývojářům, protože mohou duálně spouštět svou vlastní ROM se starou verzí a novou testovací verzí pro kontrolu regresí.
  • Jak oddíly A/B ovlivňují mody, jako jsou vlastní jádra, Magisk nebo Xposed?
    • Při jejich instalaci musíte být opatrní, ale v současné době nejsou žádné problémy. Magisk oficiálně podporuje zařízení s bezproblémovými aktualizacemi, a pokud flashujete věci ve správném pořadí, neměli byste mít žádné problémy. Před flashováním ostatních modů nezapomeňte flashnout vlastní jádro a měli byste být připraveni.
  • Mohu flashovat dvě různé ROM na každý oddíl a dual boot?
    • Teoreticky ano. Problémy však vznikají kvůli sdílenému datovému oddílu, takže se to nedoporučuje.
  • Znamená to, že mám schéma oddílů A/B, že mám omezený úložný prostor?
    • Ani náhodou! Google říká, že zařízení, která podporují bezproblémové aktualizace, obětují pouze několik stovek megabajtů úložného prostoru, aby je podporovala. Výhody převažují nad těmito náklady.
  • Moje zařízení podporuje oddíly A/B, znamená to, že mohu použít generický systémový obraz Project Treble?
    • Ne nutně. Project Treble a podpora A/B spolu nesouvisí. Motorola Moto Z2 Force nepodporuje Project Treble, přesto podporuje schéma rozdělení A/B.
  • Moje zařízení podporuje Project Treble, znamená to, že mám schéma rozdělení A/B?
    • Není tomu tak vždy. Honor 9 Lite je ukázkovým příkladem, protože podporuje Project Treble, ale nemá schéma rozdělení A/B.
  • Proč musím nejprve nabootovat TWRP pomocí rychlého spouštění a poté jej flashovat?
    • Důvodem je to, jak funguje rychlé spouštění, a skutečnost, že oddíl pro obnovení již neexistuje. Obnova je umístěna uvnitř zaváděcího oddílu, takže musíme upravit jak boot_a, tak boot_b. Ve fastbootu nemůžete opravit oddíl, pouze přes něj flashnout. Teoreticky byste mohli vytvořit předpatchovaný spouštěcí obraz a poté jej místo toho flashovat.
  • Existují nějaká nebezpečí s oddíly A/B? Jak věci ovlivňuje ochrana proti vrácení zpět?
    • Google se ze všech sil snažil, aby to nebyl problém, ale v případě Motorola Moto Z2 Byly známy případy, kdy zařízení po upgradu na Android znovu aktivovalo starší slot Oreo. To znamenalo, že se spustila ochrana proti vrácení zpět a majitelé zařízení mohli zachránit svůj smartphone pouze pomocí obnovy EDL. Google říká, že ochrana proti vrácení se spustí až po prvním spuštění, takže slot musí být po aktualizaci plně funkční, než již nebudete moci přejít na nižší verzi.