Ako oddiely A/B a plynulé aktualizácie ovplyvňujú vlastný vývoj na XDA

click fraud protection

O Seamless Updates ste už možno počuli. Zahŕňa niečo, čo sa nazýva „partície A/B“. Čo to je a ako to ovplyvňuje vlastný vývoj na XDA?

Keď bol vydaný Android Nougat, hovorilo sa nám o tom všetky druhy nových funkcií. Pre začiatočníkov sme dostali novo aktualizované používateľské rozhranie spolu s dlho očakávanými funkciami viacerých okien a podporou Vulkan Graphics API. Jeden prírastok pod kapotou ale preletel nad hlavami väčšiny používateľov. Android Nougat predstavil „bezproblémové aktualizácie“ na zariadeniach, ktoré podporujú oddiely A/B. Prevažná väčšina existujúcich zariadení so systémom Android (okrem nových Google Pixel a Google Pixel XL) v tom čase nemala oddiely A/B, a preto nemohla využívať bezproblémové aktualizácie. Základným predpokladom tejto funkcie je, že zariadenie má druhú sadu systémových, zavádzacích, dodávateľských a iných dôležitých oddielov, a keď získate OTA aktualizujte aktualizácia prebieha na pozadí, zatiaľ čo druhá skupina oddielov je opravená, čo vám umožňuje bezproblémové reštartovanie do aktualizovaného softvéru. Ak aktualizácia zlyhá, dostanete sa späť do fungujúcej zostavy, čo znamená, že spoločnosti budú mať menej starostí a spotrebitelia budú lepšie chránení.

Podpora bezproblémových aktualizácií nie je podmienkou pre žiadne nové zariadenie so systémom Android, na rozdiel od Project Treble. Prevažná väčšina nových zariadení so systémom Android preto túto funkciu nepodporuje. Zatiaľ vedieme zoznam všetkých podporovaných zariadenía je jasné, že táto funkcia nie je široko podporovaná. Je to škoda, pretože oddiely A/B prinášajú množstvo výhod ako pre bežných používateľov, tak aj pre náročných používateľov. Táto funkcia má však v komunite nadšencov trochu zlú povesť, pretože sa vníma, že sťažuje vývoj Androidu a flashovanie vlastných úprav. V skutočnosti to tak nie je, preto sme chceli demystifikovať bezproblémové aktualizácie a vysvetliť, ako oddiely A/B ovplyvňujú vlastný vývoj na XDA.

Veľká vďaka patrí senior členovi XDA npjohnson, a prispievateľ do LineageOS a udržiavateľ Motorola Moto Z2 Force, ktorá nám pomohla skontrolovať tento článok.


Oddiely na zariadení so systémom Android

Oddiel je jednoducho oddelená časť vnútorného úložiska telefónu, kde sa uchovávajú údaje. Aký druh údajov sa uchováva na každom oddiele, závisí od hardvéru, operačného systému a mnohých ďalších faktorov. Bootloader bude mať jeden, systém (Android OS) jeden, používateľské dáta budú mať jeden... a tak ďalej a tak ďalej. Keď vidíte, že ľudia hovoria o „/system“ a „/cache“, odvolávajú sa na dané názvy týchto oddielov. OnePlus 6 má napríklad 72 priečok. Znie to ako veľa, ale OnePlus 6 je jedným zo zariadení, ktoré podporuje plynulé aktualizácie, čo znamená, že mnohé z týchto oddielov sú jednoducho duplikáty.

Čiastočný výstup oddielov na OnePlus 6. Niektoré oddiely A/B sú na demonštračné účely podčiarknuté.

Na zariadení je veľa oddielov, o ktoré sa ako používateľ nikdy nebudete musieť starať. Mnohé z týchto oddielov sa nikdy nezmenia pri flashovaní vlastných ROM, jadier, obnovách alebo úpravách ako Magisk alebo Xposed. Mnohé z týchto oddielov budú na naše účely buď nevyužité, alebo sú príliš nebezpečné na dotyk, pokiaľ neviete, čo robíte (XLOADER a OEMINFO na Huawei/Honor zariadenia.) Pre veľkú väčšinu používateľov systému Android sú oddiely, s ktorými sa väčšinou zaoberáme, systém, zavádzanie, obnova, používateľské údaje a v poslednej dobe vbmeta. Tu je stručné vysvetlenie účelu každého oddielu:

  • systém – obsahuje operačný systém Android, systémové knižnice, systémové aplikácie a ďalšie systémové médiá, ako sú bootanimácie, tapety na pozadí, vyzváňacie tóny atď.
  • boot - obsahuje jadro, ramdisk a na A/B zariadeniach aj obnovu
  • recovery – uchováva obnovu, kde sa TWRP najčastejšie flashuje na zariadeniach typu A (zariadenia A/B nemajú vyhradený obnovovací oddiel)
  • používateľské údaje – obsahuje všetky údaje vašej aplikácie, systému a interného úložiska
  • dodávateľ – obsahuje HAL špecifické pre platformu a zariadenie, súbory potrebné na komunikáciu operačného systému Android so základným hardvérom
  • vbmeta - oddiel pre Android Verified Boot 2.0, ktorý overuje integritu procesu zavádzania

Výrobcovia OEM zariadení môžu zmeniť svoje schémy oddielov tak, aby používali ľubovoľné rozloženie. Napríklad spoločnosť Huawei rozdeľuje zavádzaciu oblasť na ramdisk_recovery a jadro. Existuje tiež veľa ďalších oddielov, ktoré môžu obsahovať ďalšie systémové aplikácie, ako napríklad cust, product a oem, a zatiaľ čo tieto sú bezpečné na úpravu, vo všeobecnosti sa neodporúčajú, ak si chcete uľahčiť návrat na sklad. Kde teda hrajú úlohu A/B oddiely?


Schéma rozdelenia A/B

Ako fungujú aktualizácie na zariadeniach s bezproblémovými aktualizáciami

Veľmi jednoduchý obrázok, ktorý som vytvoril nižšie, ilustruje, ako prebieha aktualizácia na zariadení s podporou oddielu A/B. Oddiel, ktorý je znázornený, je systémový oddiel, aj keď iné oddiely, ako napríklad zavádzacie a dodávateľské, môžu byť tiež aktualizované akoukoľvek aktualizáciou OTA od výrobcu OEM. Tento proces aktualizácie prebieha nielen s hlavnými aktualizáciami verzie systému Android, ale aj s aktualizáciami bezpečnostných opráv.

  1. Začneme dvoma systémovými oddielmi, system_a a system_b, obe na rovnakej verzii Androidu.
  2. Za predpokladu, že system_a je aktívny, OTA aktualizácia opraví system_b, neaktívny oddiel, na pozadí.
  3. system_a je nastavený na neaktívny a system_b sa stane aktívnym, keď sa používateľ reštartuje.
  4. Teraz neaktívny oddiel system_a bude aktualizovaný pri vydaní ďalšej aktualizácie OTA.

Aké sú výhody tohto procesu aktualizácie?

  1. Ak aktualizácia zlyhá, zariadenie sa vráti späť do funkčnej zostavy na inom slote.
  2. Vaše údaje zostanú dokonale nedotknuté, aj keď je aktualizácia prerušená, pretože existuje iba jeden oddiel (údaje používateľa), v ktorom sú uložené vaše údaje.
  3. Streamovanie aktualizácie: Ak je váš dátový oddiel plný, aktualizáciu možno stiahnuť a streamovať do neaktívneho slotu. Je to celkom elegantná funkcia a znamená, že nemusíte míňať žiadne dočasné úložisko na aktualizácie. To je dôvod, prečo na zariadeniach A/B nie je žiadna oblasť vyrovnávacej pamäte, pretože už nie sú potrebné.

Aký vplyv má schéma delenia A/B na úložisko zariadenia?

Znamená skutočnosť, že bezproblémové aktualizácie vedú k množstvu duplicitných oddielov, že prichádzate o veľa úložného priestoru? Vôbec nie. Google hovorí, že zariadenia s bezproblémovou podporou aktualizácií by mali byť mimo prevádzky iba o niekoľko stoviek megabajtov vďaka odstráneniu oddielov /cache a /recovery. Odstránenie oboch vyrovnáva náklady na pridanie druhej sady oddielov. Podľa Google je obraz A/B systému Pixel polovičný oproti obrazu systému A. Väčšina dodatočného využitia úložného priestoru v skutočnosti pochádza z pridania druhého oddielu dodávateľa. To dáva zmysel, pretože v oddiele dodávateľa sú uložené všetky proprietárne binárne súbory používané výrobcami OEM (súčasť Project Treble), takže sa očakáva, že zaberie dosť miesta. Hoci Google neodporúča mať rozdelenie A/B na zariadeniach s 4 GB úložného priestoru (keďže je to takmer 10 % z celkového dostupného úložného priestoru), odporúča to na zariadeniach s 8 GB a viac.

Tu je rozpis úložného priestoru použitého v zariadení Google Pixel s oddielmi A/B a bez nich.

Veľkosti oddielov

A/B

Len A

Bootloader

50 MB*2

50 MB

Boot

32 MB * 2

32 MB

zotavenie

32 MB

Cache

100 MB

Rádio

70 MB*2

70 MB

Predajca

300 MB*2

300 MB

Systém

2048 MB*2

4096 MB

Celkom

5000 MB

4680 MB

Čo sa stalo s obnovovacím oddielom?

Základné jadro Linuxu na zariadeniach s Androidom umožňuje systému Android rozpoznať a správne používať hardvér na smartfóne. Na zariadeniach s Androidom typu A máte vo všeobecnosti dve verzie jadra: Jedna je zabalená vo vnútri obnovovacej oblasti, zatiaľ čo druhá je v zavádzacej oblasti. Na zariadeniach A/B, ktoré podporujú bezproblémové aktualizácie, je teraz obnova vo vnútri bootovacieho obrazu spolu s jadrom. Hlavnou funkciou obnovy bola inštalácia aktualizácií, ale keďže to rieši samotný systém (update_engine), kým je Android spustený, už nie je potrebný vyhradený oddiel na obnovenie.

Ak chcete nainštalovať vlastnú obnovu na A/B zariadenia, musíme upraviť zavádzaciu oblasť a nahradiť obnovu zásob našou vlastnou. To je dôvod, prečo na inštaláciu TWRP musíte použiť príkaz fastboot na spustenie vlastného zavádzacieho obrazu a potom flash inštalačný skript TWRP, pretože fastboot nemôže opraviť oddiely - iba ich úplne prebliknúť. Technicky by ste mohli vopred opraviť svoj existujúci zavádzací obraz pomocou TWRP a potom ho flashovať pomocou rýchleho spustenia, ale to je viac problémov, ako to stojí za to. Inštalačný skript TWRP opraví oddiely boot_a aj boot_b na inštaláciu TWRP.

Zábavný fakt: Android update_engine, ktorý sa stará o bezproblémové aktualizácie, je v podstate stiahnutý priamo z OS Chrome. Len nedávno boli z denníka update_engine odstránené reťazce obsahujúce „Chrome OS“, aby sa predišlo zmätku pre každého, kto náhodou kontroluje logcat.

Podporuje môj smartfón so systémom Android oddiely A/B pre bezproblémové aktualizácie?

Zatiaľ čo my viesť zoznam všetkých zariadení ktoré to podporujú, môžete tiež ľahko skontrolovať sami.


Ako bezproblémové aktualizácie ovplyvňujú vlastný vývoj?

Vnímanie A/B oddielov používateľom

Bezproblémové aktualizácie, ktoré mnohí používatelia považujú za prekážku vývoja softvéru na mieru, sú v skutočnosti pre vývojárov prínosom. Dôvodom, prečo sú A/B zariadenia vnímané ako slabo podporované vývojové zariadenia, je cena prvých A/B zariadení. Zariadenia Google Pixel boli napokon jedny z prvých, ktoré podporovali bezproblémové aktualizácie a v porovnaní so smartfónmi Nexus z minulosti boli pomerne drahé. Okrem toho, vďaka nespočetnému množstvu vylepšení, ktoré spoločnosť Google urobila pre operačný systém Android, ktorý vytvoril vlastné ROM a úpravy, ktoré sú na zariadeniach Google menej populárne, smartfóny Google Pixel sa na našich fórach nepresadili ani zďaleka tak dobre ako Nexus smartfóny. Kombinácia externých faktorov viedla k zníženiu vlastného vývoja na smartfónoch Google Pixel, hoci väčšina používateľov sa namiesto toho rozhodla obviňovať podporu oddielov A/B. Porovnajte dostupnosť vlastného vývoja na zariadeniach ako Google Pixel so zariadeniami ako Xiaomi Mi A1 na našich fórach.

Okrem toho nedostatočné pochopenie toho, ako oddiely A/B zmenili spôsob, akým používatelia potrebujú inštalovať vlastné ROM, jadrá, obnovy a úpravy, viedli k tomu, že podpora oddielov A/B bola nepopulárna. S obnovou, ktorá sa teraz nachádza vo vnútri bootovacieho obrazu, blikajúce modifikácie v nesprávnom poradí, ako je Magisk alebo Xposed, môžu spôsobiť konflikty a môžu viesť k bootloopu. To, v akom poradí flashujete tieto mody, môže byť dôležité, aj keď v prípade vlastných ROM by ste si nemali robiť starosti s tým, do akého slotu flashujete. Na rozdiel od všeobecného presvedčenia, inštalačný skript pre väčšinu vlastných ROM nebliká do oboch slotov. Väčšinou sa toho nemusíte obávať, pretože by ste nemali musieť vymieňať sloty manuálne.

Ako vývojári vidia oddiely A/B

Pri vytváraní pamäte ROM môžu vývojári použiť oba oddiely na testovanie samostatných zostavení. Ak jeden nefunguje, môžu sa jednoducho vrátiť späť k pracovnému oddielu a obnoviť svoju ROM. Vývojári môžu tiež testovať regresie jednoduchou inštaláciou aktualizácie, prepnutím aktívneho oddielu a porovnaním oboch bez toho, aby museli vymazať údaje. Tu je návod, ako tím LineageOS vníma podporu oddielov A/B:

„Mnoho ľudí v komunite Androidu namietalo, že A/B je „ťažko podporované“ a „nevhodné pre vývojárov“, hoci je v skutočnosti správne implementované. ľahšie podporovať a rovnako priateľský pre vývojárov." - jrizzoli, LineageOS Changelog 19

Počiatočné ťažkosti s podporou A/B pre vývojárov vyplynuli z úpravy ich existujúcich nástrojov na podporu týchto zariadení. Vývojár Magisk, topjohnwu, pridal oficiálnu podporu pre Google Pixel rok po tom prepustený – nie preto, že by to bolo ťažké, ale skôr preto, že mu trvalo rok, kým sa k nemu skutočne dostal pracovať na. podpora TWRP prišlo dosť rýchlo na A/B zariadeniach po tom, čo sa do toho pustil hlavný vývojár Dees_Troy. LineageOS 15.1 teraz podporuje Zariadenia A/B po tom, čo si dobrovoľníci našli čas opraviť svoj skript addon.d.

Ako aktualizovať A/B zariadenie, ktoré má vlastné obnovenie, jadro alebo iné mody

Vlastné ROM

Blikanie aktualizácií na zariadení s vlastnou pamäťou ROM znamená, že si budete musieť dávať pozor na to, ktorý slot tiež flashujete, však? Nie tak celkom. TWRP toho v skutočnosti zvládne veľa za vás a predvolene je nastavený na neaktívny slot na flashovanie vlastnej ROM. Ak je váš aktívny slot A a flashujete vlastnú ROM, v skutočnosti flashujete do slotu B. Keď reštartujete, aktívny slot je teraz B. Vývojári môžu upraviť inštalačný skript a flashovať do oboch slotov, aby to uľahčili koncovému používateľovi, hoci väčšina vlastných inštalačných skriptov ROM v súčasnosti bliká iba do jedného slotu. A nakoniec, vlastné ROM môžu implementovať A/B updater vo svojej ROM, takže používatelia sa s nimi nemusia manuálne blikajúce aktualizácie – najnovší LineageOS 15.1 obsahuje nástroj Lineage Updater a XDA Senior Member USA-RedDragon urobil a všeobecný A/B aktualizátor ktoré môžu použiť iní vývojári.

Skladové ROM

Nie je to však problematické, ak na vašom zariadení beží sériová ROM s rôznymi úpravami a chcete nainštalovať aktualizáciu bez straty všetkých týchto modov? Môže to byť, ak nepoznáte správne kroky na inštaláciu aktualizácie. Napríklad na OnePlus 6 nemôžete na svojom upravenom zariadení flashovať prírastkové OTA, pretože prírastkové OTA sa pokúsi opraviť váš upravený zavádzací obraz. Preto pravdepodobne skončíte so zavádzacou slučkou, a preto musíte vykonať úplnú aktualizáciu pamäte ROM, aby ste úplne prepísali upravený zavádzací obraz. Tu sú všeobecné kroky, ktoré musíte vykonať, aby ste nainštalovali aktualizáciu OxygenOS na váš OnePlus 6 a zároveň si zachovali TWRP, Magisk a voliteľne vlastné jadro.

  1. Stiahnuté najnovšie plná ROM PSČ
  2. Flashujte celý zip ROM pri obnove
  3. (Voliteľné) Vlastné jadro Flash
  4. Inštalátor Flash TWRP
  5. Reštartujte priamo späť na obnovenie
  6. Flash Magisk

Na zariadeniach Google Pixel môžete flash továrenský obrázok bez vymazania údajov, potom nabootujte TWRP, nainštalujte TWRP cez inštalačný skript a potom nainštalujte Magisk.

Extrahovanie aktualizácie do flash obrázkov jednotlivých oddielov

Aktualizačné súbory pre mnohé zariadenia A/B sa v porovnaní so zariadeniami typu A trochu líšia. Už to nie je len súbor zip obsahujúci množstvo obrázkov (okrem obrázkov z výroby Google a Razer), namiesto toho sú vo forme súboru payload.bin. Tento súbor môžete extrahovať a každú časť flashovať manuálne, ale vyžaduje si to špeciálny nástroj. Ak máte záujem dozvedieť sa, ako to urobiť na OnePlus 6, Xiaomi Mi A1 a mnohých ďalších A/B zariadeniach, čítajte ďalej.

Nastavenie na extrahovanie payload.bin

  1. Uistite sa, že máte Python 3.6 nainštalovaný.
  2. Stiahnite si payload_dumper.py a update_metadata_pb2.py tu.
  3. Rozbaľte svoj OTA zip a vložte súbor payload.bin do rovnakého priečinka ako tieto súbory.
  4. V závislosti od operačného systému otvorte PowerShell, príkazový riadok alebo terminál.
  5. Zadajte nasledujúci príkaz: python -m pip install protobuf
  6. Po dokončení zadajte tento príkaz: python payload_dumper.py payload.bin
  7. Tým sa začnú extrahovať obrázky v súbore payload.bin do aktuálneho priečinka, v ktorom sa nachádzate.

Ak chcete, môžete teraz flashovať každý z týchto obrázkov samostatne prostredníctvom rýchleho spustenia. Nasledujúca časť vám ukáže, ako to urobiť.

Použitie rýchleho spustenia na flashovanie obrázkov na zariadení, ktoré podporuje plynulé aktualizácie

Existuje množstvo príkazov, ktoré sú exkluzívne pre systémové zariadenia oddielu A/B. Môžete zmeniť svoj aktívny slot a flash na konkrétne sloty. Ak máte Project Treble-kompatibilné zariadenie a chcete sa naučiť, ako na to flash Generic System Images, mali by ste tieto príkazy poznať. Pozrite si tabuľku nižšie.

Príkazy rýchleho spustenia

Príkaz

Získajte aktuálny aktívny slot

fastboot getvar all | grep "current-slot"Ak používate počítač so systémom Windows, príkaz "grep" nebude fungovať.

Nastavte iný slot ako aktívny

fastboot set_active other

Nastavte zadaný slot ako aktívny

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

Flash obraz do určeného oddielu v aktuálnom slote

fastboot flash partícia.img

Flash obraz do určeného oddielu v určenom slote

fastboot flash partícia_a partícia.imgfastboot flash partícia_b partícia.img

(Poznámka: Na zariadeniach A/B môžete buď zadať oddiel v konkrétnom slote, do ktorého sa má flashovať, alebo môžete vynechať príponu slotu a bude blikať do aktuálneho aktívneho slotu. Napríklad „partition“ v príkaze flash môžete nahradiť „system“, „system_a“ alebo „system_b.“)

Na počítačoch so systémom Windows nemôžete použiť grep, takže jednoducho odstráňte túto časť a vyhľadajte "current-slot".

Pár slov o Project Treble a bezproblémových aktualizáciách

Bežná mylná predstava je, že podpora Project Treble a podpora oddielov A/B spolu súvisia, ale v skutočnosti to tak nie je. Mať jedno neznamená druhé. Motorola Moto Z2 Force používa schému delenia A/B, ale nepodporuje výšky. Na druhej strane, Honor 9 Lite podporuje Project Treble, napriek tomu je to zariadenie typu A.

Honor 9 Lite podporuje Project Treble, ale nepodporuje plynulé aktualizácie

Často kladené otázky/zhrnutie

  • Aké sú výhody delenia A/B?
    • Rozdelenie A/B na partície vám umožňuje aktualizovať váš smartfón so systémom Android počas jeho používania a jednoducho ho reštartovať, keď ste pripravení na zavedenie novej verzie. Funguje tiež ako ochrana pred tehlami – ak sa aktualizácia pokazí, vrátite sa späť k funkčnej inštalácii.
  • Bráni A/B rozdelenie vývoju?
    • Aj keď to vývojárom trvalo trochu času, kým sa prispôsobili, odpoveď je v podstate nie. V skutočnosti to môže pomôcť vývojárom, pretože môžu duálne spustiť svoju vlastnú ROM so starou verziou a novou testovacou verziou na kontrolu regresií.
  • Ako oddiely A/B ovplyvňujú mody, ako sú vlastné jadrá, Magisk alebo Xposed?
    • Pri ich inštalácii musíte byť opatrní, ale momentálne nie sú žiadne problémy. Magisk oficiálne podporuje zariadenia s bezproblémovými aktualizáciami, a pokiaľ flashujete veci v správnom poradí, nemali by ste mať žiadne problémy. Pred flashovaním ostatných modov nezabudnite flashovať vlastné jadro a mali by ste začať.
  • Môžem flashovať dve rôzne ROM na každej partícii a dual boot?
    • Teoreticky áno. Problémy však vznikajú kvôli zdieľanému dátovému oddielu, takže sa to neodporúča.
  • Znamená to, že mám schému oddielov A/B, že mám zmenšený úložný priestor?
    • Nie! Google hovorí, že zariadenia, ktoré podporujú bezproblémové aktualizácie, obetujú na ich podporu iba niekoľko stoviek megabajtov úložného priestoru. Výhody prevyšujú tieto náklady.
  • Moje zariadenie podporuje oddiely A/B, znamená to, že môžem použiť generický systémový obraz Project Treble?
    • Nie nevyhnutne. Project Treble a podpora A/B spolu nesúvisia. Motorola Moto Z2 Force nepodporuje Project Treble, ale podporuje schému oddielov A/B.
  • Moje zariadenie podporuje Project Treble, znamená to, že mám schému oddielov A/B?
    • Nie vždy je to tak. Honor 9 Lite je ukážkovým príkladom, pretože podporuje Project Treble, no nemá schému oddielov A/B.
  • Prečo musím najprv spustiť TWRP pomocou rýchleho spustenia a potom ho flashovať?
    • Je to kvôli tomu, ako funguje rýchle spustenie a skutočnosť, že oddiel na obnovenie už neexistuje. Obnova je umiestnená vo vnútri zavádzacej oblasti, takže musíme upraviť boot_a aj boot_b. Vo fastboote nemôžete opraviť oblasť, iba ju prebliknúť. Teoreticky by ste mohli vytvoriť predpatchovaný zavádzací obraz a potom ho namiesto toho flashovať.
  • Sú s oddielmi A/B nejaké nebezpečenstvá? Ako veci ovplyvňuje ochrana proti vráteniu?
    • Google sa zo všetkých síl snažil, aby to nebol problém, ale v prípade Motoroly Moto Z2 Boli známe prípady, keď zariadenie po inovácii na Android znova aktivovalo starší slot Oreo. To znamenalo, že sa spustila ochrana proti vráteniu a majitelia zariadení mohli zachrániť svoj smartfón iba pomocou obnovy EDL. Google hovorí, že ochrana proti vráteniu sa spustí až po prvom spustení, takže slot musí byť po aktualizácii plne funkčný, aby ste už nemohli prejsť na nižšiu verziu.