Kako A/B particije i besprijekorna ažuriranja utječu na prilagođeni razvoj na XDA

click fraud protection

Možda ste prije čuli za besprijekorna ažuriranja. To uključuje nešto što se zove "A/B particije." Što je to i kako utječe na prilagođeni razvoj na XDA?

Kada je Android Nougat objavljen, potaknuo nas je na razgovor sve vrste novih značajki. Dobili smo novo ažurirano korisničko sučelje za početak zajedno s dugo očekivanim mogućnostima više prozora i podrškom za Vulkan Graphics API. Ali jedan dodatak ispod haube preletio je preko glave većini korisnika. Android Nougat predstavio je "Bešavna ažuriranja" na uređajima koji podržavaju A/B particije. Velika većina postojećih Android uređaja (isključujući novi Google Pixel i Google Pixel XL) u to vrijeme nije imala A/B particije i stoga nije mogla iskoristiti besprijekorna ažuriranja. Osnovna premisa ove značajke je da uređaj ima drugi skup particija sustava, pokretanja, dobavljača i drugih važnih particija, a kada dobijete OTA ažuriraj ažuriranje se događa u pozadini dok se drugi skup particija krpa što vam omogućuje da se bez problema ponovno pokrenete u ažuriranu verziju softvera. Ako ažuriranje ne uspije, bit ćete vraćeni na radnu verziju, što znači da će tvrtke imati manje glavobolja, a potrošači su bolje zaštićeni.

Podrška za besprijekorna ažuriranja nije preduvjet ni za jedan novi Android uređaj, za razliku od Project Treble. Kao takva, velika većina novih Android uređaja ne podržava tu značajku. Do sada smo vodili popis svih podržanih uređaja, a jasno je da ova značajka nije široko podržana. Šteta jer A/B particije donose mnogo prednosti i redovitim korisnicima i iskusnim korisnicima. Međutim, značajka ima pomalo lošu reputaciju u zajednici entuzijasta jer se smatra da otežava razvoj Androida i fleširanje prilagođenih izmjena. To zapravo nije slučaj, pa smo htjeli demistificirati besprijekorna ažuriranja i objasniti kako A/B particije utječu na prilagođeni razvoj na XDA.

Puno hvala starijem članu XDA npjohnson, a suradnik na LineageOS i održavatelj Motorola Moto Z2 Force, koji nam je pomogao provjeriti ovaj članak.


Particije na Android uređaju

Particija je jednostavno diskretni odjeljak unutarnje pohrane telefona gdje se čuvaju podaci. Kakvi se podaci čuvaju na svakoj particiji ovisi o hardveru, operativnom sustavu i mnogim drugim čimbenicima. Bootloader će imati jedan, sustav (Android OS) će imati jedan, korisnički podaci će imati jedan... i tako dalje. Kada vidite da ljudi govore o "/system" i "/cache", oni misle na imena za te particije. OnePlus 6, na primjer, ima 72 pregrade. To zvuči kao puno, ali OnePlus 6 je jedan od uređaja koji podržava besprijekorna ažuriranja što znači da su mnoge od ovih particija jednostavno duplikati jedne druge.

Djelomičan izlaz particija na OnePlus 6. Neke A/B particije su podvučene u svrhu demonstracije.

Postoji mnogo particija na uređaju o kojima kao korisnik nikada nećete morati brinuti. Mnoge od ovih particija nikada se ne mijenjaju prilikom fleširanja prilagođenih ROM-ova, kernela, oporavka ili izmjena kao što su Magisk ili Xposed. Mnoge od ovih particija neće biti iskorištene za naše svrhe ili su preopasne za dodir osim ako ne znate što radite (XLOADER i OEMINFO na Huawei/Honor uređaji padaju na pamet.) Za veliku većinu korisnika Androida, particije s kojima se uglavnom bavimo su sustav, pokretanje, oporavak, korisnički podaci i odnedavno dobavljač i vbmeta. Evo kratkog objašnjenja svrhe svake particije:

  • sustav - sadrži Android OS, sistemske biblioteke, sistemske aplikacije i druge sistemske medije kao što su bootanimacije, pozadinske slike, melodije zvona itd.
  • boot - drži kernel, ramdisk, a na A/B uređajima također i oporavak
  • oporavak - drži oporavak, gdje se TWRP najčešće flešuje samo na uređajima A (A/B uređaji nemaju namjensku particiju za oporavak)
  • korisnički podaci - čuvaju sve vaše podatke o aplikaciji, sustavu i internoj pohrani
  • dobavljač - sadrži HAL-ove specifične za platformu i uređaj, datoteke potrebne da OS Android komunicira s osnovnim hardverom
  • vbmeta - particija za Android Verified Boot 2.0 koja provjerava integritet procesa pokretanja

OEM-ovi uređaja mogu promijeniti svoje sheme particija kako bi koristili raspored koji god žele. Na primjer, Huawei dijeli particiju za pokretanje na ramdisk_recovery i kernel. Također postoji mnogo dodatnih particija koje mogu sadržavati druge sistemske aplikacije kao što su cust, product i oem, a dok sigurno ih je mijenjati, općenito se ne preporučuje ako si želite olakšati povratak na zalihu. Dakle, gdje A/B particije igraju ulogu?


A/B particijska shema

Kako funkcioniraju ažuriranja na uređajima s besprijekornim ažuriranjima

Vrlo jednostavna slika koju sam napravio u nastavku ilustrira kako se upravlja ažuriranjem na uređaju s podrškom za A/B particiju. Particija koja je ilustrirana je sistemska particija, iako se druge particije kao što su boot i vendor također mogu ažurirati bilo kojim danim OTA ažuriranjem od OEM-a. Ovaj se postupak ažuriranja događa ne samo s glavnim ažuriranjima verzije Androida, već i s ažuriranjima sigurnosnih zakrpa.

  1. Počinjemo s dvije sistemske particije, system_a i system_b, obje na istoj verziji Androida.
  2. Pod pretpostavkom da je system_a aktivan, OTA ažuriranje će zakrpati system_b, neaktivnu particiju, u pozadini.
  3. system_a je postavljen na neaktivan, a system_b tada postaje aktivan kada se korisnik ponovno pokrene.
  4. Sada neaktivna particija, system_a, bit će ažurirana kada izađe sljedeće OTA ažuriranje.

Koje su prednosti ovog procesa ažuriranja?

  1. Ako ažuriranje ne uspije, uređaj će se vratiti na radnu verziju na drugom utoru.
  2. Vaši podaci ostaju savršeno netaknuti, čak i ako je ažuriranje prekinuto, jer postoji samo jedna particija (korisnički podaci) u kojoj se nalaze vaši podaci.
  3. Ažuriranje strujanja: Ako je vaša podatkovna particija puna, ažuriranje se može preuzeti i streamati u neaktivni utor. To je prilično zgodna značajka i znači da ne morate trošiti nikakvu privremenu pohranu na svoja ažuriranja. Zato nema particije predmemorije na A/B uređajima jer više nisu potrebni.

Kakav utjecaj shema A/B particioniranja ima na pohranu uređaja?

Znači li činjenica da besprijekorna ažuriranja rezultiraju hrpom dupliciranih particija da gubite hrpu prostora za pohranu? Nikako. Google kaže da bi uređaji s besprijekornom podrškom za ažuriranje trebali biti nedostupni samo za nekoliko stotina megabajta zahvaljujući uklanjanju particija /cache i /recovery. Uklanjanje obje uravnotežuje trošak dodavanja drugog skupa particija. Prema Googleu, Pixelova slika A/B sustava upola je manja od slike samo A sustava. Većina dodatne upotrebe prostora za pohranu zapravo dolazi od dodavanja druge particije dobavljača. To ima smisla jer particija dobavljača sadrži sve vlasničke binarne datoteke koje koriste proizvođači originalne opreme (dio Project Treble), pa se očekuje da će zauzeti dosta prostora. Iako Google ne preporučuje A/B particioniranje na uređajima s 4 GB pohrane (jer je to gotovo 10% ukupne dostupne pohrane), preporučuju je na uređajima s 8 GB i više.

Ovdje je pregled prostora za pohranu koji se koristi na Google Pixelu sa i bez A/B particija.

Veličine particija

A/B

A-samo

Bootloader

50MB*2

50 MB

Čizma

32MB*2

32 MB

Oporavak

32 MB

Predmemorija

100 MB

Radio

70MB*2

70 MB

Dobavljač

300MB*2

300 MB

Sustav

2048MB*2

4096 MB

Ukupno

5000 MB

4680 MB

Što se dogodilo s particijom za oporavak?

Temeljna jezgra Linuxa na Android uređajima ono je što omogućuje Androidu da prepozna i ispravno koristi hardver na pametnom telefonu. Na Android uređajima samo za A općenito imate dvije verzije kernela: jedna je pakirana unutar particije za oporavak, dok je druga u particiji za pokretanje. Na A/B uređajima koji podržavaju besprijekorna ažuriranja, oporavak je sada unutar slike za pokretanje zajedno s kernelom. Glavna funkcija oporavka bila je instaliranje ažuriranja, ali budući da to rješava sam sustav (update_engine) dok je Android pokrenut, namjenska particija za oporavak više nije potrebna.

Da bismo instalirali prilagođeni oporavak na A/B uređaje, moramo izmijeniti particiju za pokretanje i zamijeniti osnovni oporavak našim vlastitim. To je razlog zašto da biste instalirali TWRP morate upotrijebiti naredbu fastboot da biste prvo pokrenuli prilagođenu sliku za pokretanje i zatim bljeskajte instalacijsku skriptu TWRP-a, jer brzo pokretanje ne može zakrpati particije—samo ih u cijelosti bljeskajte. Možete tehnički unaprijed zakrpati svoju postojeću sliku za pokretanje s TWRP-om i zatim je flashati putem brzog pokretanja, ali to je više problema nego što vrijedi. Skripta za instalaciju TWRP-a zakrpa boot_a i boot_b particije za instalaciju TWRP-a.

Zabavna činjenica: Android update_engine koji upravlja besprijekornim ažuriranjima u osnovi je kopiran izravno iz OS-a Chrome. Tek nedavno su nizovi koji sadrže "Chrome OS" uklonjeni iz dnevnika update_enginea kako bi se izbjegla zabuna za svakoga tko provjeri logcat.

Podržava li moj Android pametni telefon A/B particije za besprijekorna ažuriranja?

Dok mi voditi popis svih uređaja koji to podržavaju, možete i sami lako provjeriti.


Kako besprijekorna ažuriranja utječu na prilagođeni razvoj?

Korisnička percepcija A/B particija

Besprijekorna ažuriranja koja mnogi korisnici smatraju smetnjom razvoju prilagođenog softvera zapravo su blagodat za programere. Razlog zbog kojeg se smatra da A/B uređaji imaju lošu razvojnu podršku svodi se na cijenu prvih A/B uređaja. Uostalom, Google Pixel uređaji bili su među prvima koji su podržavali besprijekorna ažuriranja i u usporedbi s Nexus pametnim telefonima iz prošlosti bili su relativno skupi. Nadalje, zahvaljujući mnoštvu poboljšanja koje je Google napravio u OS Android koji je napravio prilagođene ROM-ove i izmjene manje popularne na Google uređajima, pametni telefoni Google Pixel nisu zaživjeli na našim forumima ni približno tako dobro kao Nexus pametni telefoni. Kombinacija vanjskih čimbenika dovela je do smanjenja prilagođenog razvoja na Google Pixel pametnim telefonima, iako je većina korisnika umjesto toga odlučila okriviti podršku za A/B particiju. Usporedite dostupnost prilagođenog razvoja na uređajima poput Google Pixela s uređajima poput Xiaomi Mi A1 na našim forumima.

Osim toga, nedostatak razumijevanja kako su A/B particije promijenile način na koji korisnici trebaju instalirati prilagođene ROM-ove, kernele, oporavke i izmjene dovelo je do nepopularnosti podrške za A/B particije. S oporavkom koji sada živi unutar slike za pokretanje, bljeskanje izmjena pogrešnim redoslijedom kao što su Magisk ili Xposed mogu uzrokovati sukobe i dovesti do petlje za pokretanje. Kojim redoslijedom flešate ove modove može biti važno, iako u slučaju prilagođenih ROM-ova ne biste trebali brinuti o tome u koji slot flešate. Suprotno uvriježenom mišljenju, instalacijska skripta za većinu prilagođenih ROM-ova ne bljeska u oba utora. Uglavnom ne morate brinuti o tome jer ne biste trebali ručno mijenjati utore.

Kako programeri gledaju na A/B particije

Prilikom izgradnje ROM-a, programeri mogu koristiti obje particije za testiranje odvojenih verzija. Ako jedna ne radi, mogu se jednostavno vratiti na radnu particiju i ponovno izgraditi svoj ROM. Programeri također mogu testirati regresije jednostavnim instaliranjem ažuriranja, promjenom aktivne particije i usporedbom to dvoje bez brisanja podataka. Evo kako LineageOS tim gleda na podršku za A/B particije:

"Mnogi diljem Android zajednice kritikovali su A/B kao 'težak za podršku' i 'nije prilagođen programerima', dok je zapravo pravilno implementiran lakši za podršku i jednako prilagođen programerima." - jrizzoli, LineageOS Changelog 19

Početne poteškoće s A/B podrškom za programere nastale su zbog modificiranja njihovih postojećih alata za podršku tim uređajima. Programer Magiska, topjohnwu, dodao je službenu podršku za Google Pixel godinu dana nakon što je to učinio pušten—ne zato što je bilo teško, već zato što mu je trebala godina da doista nabavi uređaj raditi na. TWRP podrška došao prilično brzo na A/B uređajima nakon što ga je glavni programer, Dees_Troy, provalio. LineageOS 15.1 sada podržava A/B uređaji nakon što su volonteri našli vremena popraviti njihovu addon.d skriptu.

Kako ažurirati A/B uređaj koji ima prilagođeni oporavak, kernel ili druge modifikacije

Prilagođeni ROM-ovi

Flashiranje ažuriranja na uređaju s prilagođenim ROM-om znači da ćete također morati paziti koji utor flešujete, zar ne? Ne baš. TWRP će zapravo obraditi mnogo toga umjesto vas, a prema zadanim je postavkama neaktivan utor za flashanje prilagođenog ROM-a. Ako je vaš aktivni utor A i flešujete prilagođeni ROM, zapravo bljeskate u utor B. Kada ponovno pokrenete sustav, aktivni utor je sada B. Programeri mogu modificirati instalacijsku skriptu i flashati u oba utora kako bi olakšali krajnjem korisniku, iako većina prilagođenih instalacijskih skripti ROM-a trenutačno flashira samo u jedan utor. Na kraju, prilagođeni ROM-ovi mogu implementirati A/B ažuriranje u svoj ROM tako da se korisnici čak ne moraju petljati s ručno bljeskanje ažuriranja—najnoviji LineageOS 15.1 uključuje alat Lineage Updater i XDA Senior Member SAD-RedDragon napravio a generički A/B updater koje drugi programeri mogu koristiti.

Stock ROM-ovi

Ali nije li problematično ako vaš uređaj koristi standardni ROM s raznim modifikacijama i želite instalirati ažuriranje bez gubitka svih ovih modifikacija? Može biti ako ne znate prave korake za instaliranje ažuriranja. Na OnePlus 6, na primjer, ne možete flashati inkrementalni OTA na vašem modificiranom uređaju jer će inkrementalni OTA pokušati zakrpati vašu modificiranu sliku za pokretanje. Stoga ćete vjerojatno završiti s bootloopom i zato morate flashati potpuno ažuriranje ROM-a da biste potpuno prebrisali svoju modificiranu sliku za pokretanje. Evo općih koraka koje morate poduzeti da biste instalirali ažuriranje OxygenOS-a na svoj OnePlus 6, a da pritom zadržite TWRP, Magisk i opcionalno prilagođeni kernel.

  1. Preuzeto najnovije puni ROM zip
  2. Flash cijeli ROM zip u oporavku
  3. (Izborno) Flash prilagođeni kernel
  4. Flash TWRP instalacijski program
  5. Ponovo pokrenite izravno natrag na oporavak
  6. Flash Magisk

Na uređajima Google Pixel to možete flash tvorničke slike bez brisanja podataka, zatim pokrenite TWRP, instalirajte TWRP putem instalacijske skripte, zatim instalirajte Magisk.

Izdvajanje ažuriranja za flash pojedinačne slike particija

Datoteke ažuriranja za mnoge A/B uređaje malo su drugačije u usporedbi s uređajima samo za A. One više nisu samo zip datoteke koje sadrže puno slika (isključujući Googleove i Razerove tvorničke slike), već su u obliku datoteke payload.bin. Možete izdvojiti ovu datoteku i flash svaki dio ručno, ali je za to potreban poseban alat. Ako vas zanima kako to učiniti na OnePlus 6, Xiaomi Mi A1 i mnogim drugim A/B uređajima, čitajte dalje.

Postavljanje za izdvajanje payload.bin

  1. Provjerite imate li Python 3.6 instaliran.
  2. Preuzmite payload_dumper.py i update_metadata_pb2.py ovdje.
  3. Izdvojite svoj OTA zip i stavite payload.bin u istu mapu u kojoj su ove datoteke.
  4. Otvorite PowerShell, Command Prompt ili Terminal ovisno o vašem OS-u.
  5. Unesite sljedeću naredbu: python -m pip install protobuf
  6. Kada to završite, unesite ovu naredbu: python payload_dumper.py payload.bin
  7. Ovo će početi izdvajati slike unutar datoteke payload.bin u trenutnu mapu u kojoj se nalazite.

Svaku od ovih slika sada možete zasebno flashati putem brzog pokretanja ako želite. Sljedeći odjeljak pokazuje vam kako to učiniti.

Korištenje brzog pokretanja za bljeskanje slika na uređaju koji podržava besprijekorna ažuriranja

Postoji niz naredbi koje su ekskluzivne za uređaje sustava A/B particije. Možete promijeniti svoj aktivni utor i flash na određene utore. Ako imate Project Treble-kompatibilan uređaj i želite naučiti kako flash generičke slike sustava, trebali biste biti upoznati s ovim naredbama. Pogledajte tablicu ispod.

Fastboot naredbe

Naredba

Dobiti trenutno aktivno mjesto

brzo pokretanje getvar sve | grep "current-slot" Ako ste na računalu sa sustavom Windows, naredba "grep" neće raditi.

Postavite drugi utor kao aktivan

fastboot set_active ostalo

Postavite navedeni utor kao aktivan

fastboot set_active $ORfastboot --set-active=_$utor gdje je $ ili a ili b

Flash sliku na navedenu particiju u trenutnom utoru

fastboot flash particija partition.img

Flash sliku na navedenu particiju u navedenom utoru

fastboot flash partition_a partition.imgfastboot flash partition_b partition.img

(Napomena: Na A/B uređajima možete navesti particiju u određenom utoru na koji želite flashati ili možete izostaviti sufiks utora i on će bljeskati na trenutno aktivni utor. Na primjer, možete zamijeniti "particiju" u flash naredbi sa "system", "system_a" ili "system_b.")

Na Windows računalima ne možete koristiti grep, pa samo uklonite taj dio i potražite "current-slot".

Riječ o projektu Treble i besprijekornim ažuriranjima

Uobičajena zabluda je da su podrška za Project Treble i podrška za A/B particiju međusobno povezane, ali to zapravo nije slučaj. Imati jedno ne znači i drugo. Motorola Moto Z2 Force koristi shemu A/B particioniranja, ali ne podržava Treble. S druge strane, Honor 9 Lite podržava Project Treble, ali je ipak A-only uređaj.

Honor 9 Lite podržava Project Treble, ali ne podržava besprijekorna ažuriranja

Često postavljana pitanja/Sažetak

  • Koje su prednosti A/B particioniranja?
    • A/B particioniranje omogućuje vam da ažurirate svoj Android pametni telefon dok ga koristite, jednostavnim ponovnim pokretanjem kada budete spremni za pokretanje nove verzije. Također djeluje kao zaštita od cigli—ako ažuriranje pođe po zlu, vratit ćete se na radnu instalaciju.
  • Koči li A/B particioniranje razvoj?
    • Iako je programerima trebalo malo vremena da se prilagode, odgovor je uglavnom ne. Zapravo, može pomoći programerima jer mogu dvostruko pokrenuti svoj prilagođeni ROM sa starom verzijom i novom verzijom za testiranje kako bi provjerili regresije.
  • Kako A/B particije utječu na modove kao što su prilagođeni kerneli, Magisk ili Xposed?
    • Morate biti oprezni kada ih instalirate, ali trenutno nema problema. Magisk službeno podržava uređaje s besprijekornim ažuriranjem, i sve dok flashate stvari pravim redoslijedom, ne biste trebali imati problema. Obavezno flashajte prilagođeni kernel prije flashanja ostalih modova i trebali biste biti spremni.
  • Mogu li flashati dva različita ROM-a na svakoj particiji i dual boot?
    • U teoriji, da. Ipak, problemi nastaju zbog dijeljene particije podataka, pa se ne preporučuje.
  • Znači li postojanje sheme A/B particije da imam smanjenu pohranu?
    • Ne! Google kaže da uređaji koji podržavaju besprijekorno ažuriranje žrtvuju samo nekoliko stotina megabajta prostora za pohranu kako bi to podržali. Prednosti su veće od tog troška.
  • Moj uređaj podržava A/B particije, znači li to da mogu koristiti sliku generičkog sustava Project Treble?
    • Nije nužno. Project Treble i A/B podrška nisu povezani. Motorola Moto Z2 Force ne podržava Project Treble, ali podržava shemu A/B particije.
  • Moj uređaj podržava Project Treble, znači li to da imam A/B particionu shemu?
    • To nije uvijek slučaj. Honor 9 Lite je vrhunski primjer jer podržava Project Treble, ali nema shemu A/B particije.
  • Zašto moram prvo pokrenuti TWRP s brzim pokretanjem, a zatim ga flashati?
    • To je zbog načina na koji funkcionira brzo pokretanje i činjenice da particija za oporavak više ne postoji. Oporavak se nalazi unutar particije za pokretanje, tako da moramo modificirati i boot_a i boot_b. Ne možete zakrpati particiju u fastboot-u, samo flash preko nje. Možete, u teoriji, napraviti unaprijed zakrpanu sliku za pokretanje i zatim je flashirati umjesto toga.
  • Postoje li opasnosti s A/B pregradama? Kako zaštita od vraćanja utječe na stvari?
    • Google se maksimalno potrudio da to ne bude problem, ali u slučaju Motorola Moto Z2 Force, poznati su slučajevi u kojima je uređaj ponovno aktivirao stariji utor nakon nadogradnje na Android Oreo. To je značilo da se aktivirala zaštita od vraćanja, a vlasnici uređaja mogli su spasiti svoj pametni telefon samo EDL oporavkom. Google kaže da se zaštita od vraćanja uključuje tek nakon prvog pokretanja, tako da utor mora biti u potpunosti funkcionalan nakon ažuriranja prije nego što više ne možete vratiti verziju.