Cum afectează partițiile A/B și actualizările fără întreruperi dezvoltarea personalizată pe XDA

Este posibil să fi auzit de Actualizări fără întreruperi înainte. Implica ceva numit „partiții A/B”. Ce este și cum afectează dezvoltarea personalizată pe XDA?

Când a lansat Android Nougat, ne-a făcut să vorbim tot felul de caracteristici noi. Avem o interfață de utilizator recent actualizată pentru începători, împreună cu capabilitățile mult așteptate de ferestre multiple și suportul Vulkan Graphics API. Dar o adăugare sub capotă a zburat peste capetele majorității utilizatorilor. Android Nougat a introdus „Actualizări fără întreruperi” pe dispozitivele care acceptă partiții A/B. Marea majoritate a dispozitivelor Android existente (cu excepția noilor Google Pixel și Google Pixel XL) nu aveau partiții A/B la momentul respectiv și, prin urmare, nu puteau profita de actualizările fără întreruperi. Premisa de bază a acestei caracteristici este că dispozitivul are un al doilea set de sistem, boot, furnizor și alte partiții importante, iar când obțineți o OTA actualizați actualizarea are loc în fundal, în timp ce al doilea set de partiții sunt corecționați, ceea ce vă permite să reporniți fără probleme într-o versiune de software actualizată. Dacă o actualizare eșuează, veți fi dat înapoi la o versiune funcțională, ceea ce înseamnă că companiile vor avea mai puține dureri de cap cu care să se ocupe și consumatorii sunt mai bine protejați.

Sprijinirea actualizărilor fără întreruperi nu este o cerință pentru niciun dispozitiv Android nou, spre deosebire de Project Treble. Ca atare, marea majoritate a noilor dispozitive Android nu acceptă această funcție. Până acum am păstrat o listă cu toate dispozitivele acceptate, și este clar că această caracteristică nu este acceptată pe scară largă. Este păcat, deoarece partițiile A/B aduc o mulțime de beneficii atât pentru utilizatorii obișnuiți, cât și pentru utilizatorii puternici. Cu toate acestea, caracteristica are o reputație puțin proastă în comunitatea de entuziaști, deoarece este percepută că face dezvoltarea Android și modificările personalizate intermitente mai dificile. Acesta nu este de fapt cazul, așa că am vrut să demistificăm actualizările fără probleme și să explicăm modul în care partițiile A/B afectează dezvoltarea personalizată pe XDA.

Multumesc mult membrului senior XDA npjohnson, A contribuitor la LineageOS și întreţinător al Motorola Moto Z2 Force, care ne-a ajutat să verificăm acest articol.


Partiții pe un dispozitiv Android

O partiție este pur și simplu o secțiune discretă din stocarea internă a telefonului în care sunt păstrate datele. Ce fel de date sunt păstrate pe fiecare partiție depinde de hardware, de sistemul de operare și de mulți alți factori. Bootloader-ul va avea unul, sistemul (OS Android) va avea unul, datele utilizatorului vor avea unul... și așa mai departe și așa mai departe. Când vezi că oamenii vorbesc despre „/system” și „/cache”, ei se referă la numele date pentru acele partiții. OnePlus 6, de exemplu, are 72 de partiții. Sună mult, dar OnePlus 6 este unul dintre dispozitivele care acceptă actualizări fără întreruperi, ceea ce înseamnă că multe dintre aceste partiții sunt pur și simplu duplicate unele ale altora.

Ieșire parțială a partițiilor de pe OnePlus 6. Unele partiții A/B sunt subliniate în scop demonstrativ.

Există o mulțime de partiții pe un dispozitiv de care nu va trebui să vă faceți niciodată griji ca utilizator. Multe dintre aceste partiții nu sunt niciodată modificate atunci când se flashează ROM-uri personalizate, nuclee, recuperări sau modificări precum Magisk sau Xposed. Multe dintre aceste partiții fie vor fi neutilizate în scopurile noastre, fie sunt prea periculoase pentru a fi atinse dacă nu știți ce faceți (XLOADER și OEMINFO pe Huawei/Honor Pentru marea majoritate a utilizatorilor de Android, partițiile cu care ne ocupăm cel mai mult sunt sistemul, bootarea, recuperarea, datele utilizatorului și, mai recent, furnizorul și vbmeta. Iată o scurtă explicație a scopului fiecărei partiții:

  • sistem - deține sistemul de operare Android, bibliotecile de sistem, aplicațiile de sistem și alte medii de sistem, cum ar fi animații de pornire, imagini de fundal, tonuri de apel etc.
  • boot - deține nucleul, discul ram și pe dispozitivele A/B, de asemenea, recuperarea
  • recuperare - deține recuperarea, unde TWRP este cel mai frecvent flash pe dispozitivele A-only (dispozitivele A/B nu au o partiție de recuperare dedicată)
  • userdata - deține toate aplicațiile, sistemul și datele de stocare internă
  • furnizor - deține HAL-uri specifice platformei și dispozitivului, fișierele necesare pentru ca sistemul de operare Android să comunice cu hardware-ul de bază
  • vbmeta - partiția pentru Android Verified Boot 2.0 care verifică integritatea procesului de pornire

Producătorii OEM de dispozitive își pot schimba schemele de partiții pentru a utiliza orice aspect doresc. De exemplu, Huawei împarte partiția de pornire în ramdisk_recovery și kernel. Există, de asemenea, o mulțime de partiții suplimentare care pot conține alte aplicații de sistem, cum ar fi cust, product și OEM, și în timp ce acestea sunt sigure de modificat, în general nu este recomandat dacă doriți să vă ușurați revenirea la stoc. Deci, unde joacă un rol partițiile A/B?


Schema de partiții A/B

Cum funcționează actualizările pe dispozitivele cu actualizări fără întreruperi

Imaginea foarte simplă pe care am făcut-o mai jos ilustrează modul în care este gestionată o actualizare pe un dispozitiv cu suport pentru partiții A/B. Partiția care este ilustrată este partiția de sistem, deși alte partiții, cum ar fi boot și furnizor, pot fi, de asemenea, actualizate cu orice actualizare OTA dată de la un OEM. Acest proces de actualizare are loc nu numai cu actualizări majore ale versiunii Android, ci și cu actualizări de corecție de securitate.

  1. Începem cu două partiții de sistem, system_a și system_b, ambele pe aceeași versiune de Android.
  2. Presupunând că system_a este activ, actualizarea OTA va corecta system_b, partiția inactivă, în fundal.
  3. system_a este setat la inactiv și system_b devine apoi activ odată ce utilizatorul repornește.
  4. Partiția acum inactivă, system_a, va fi actualizată la lansarea următoarei actualizări OTA.

Care sunt beneficiile acestui proces de actualizare?

  1. Dacă o actualizare eșuează, dispozitivul va reveni la versiunea de lucru pe celălalt slot.
  2. Datele dumneavoastră sunt păstrate perfect intacte, chiar dacă actualizarea este anulată, deoarece există o singură partiție (userdata) care adăpostește datele dumneavoastră.
  3. Actualizare în flux: dacă partiția de date este plină, atunci actualizarea poate fi descărcată și transmisă în flux în slotul inactiv. Este o caracteristică destul de îngrijită și înseamnă că nu trebuie să pierdeți spațiu de stocare temporar pentru actualizările dvs. De aceea, nu există o partiție cache pe dispozitivele A/B, deoarece acestea nu mai sunt necesare.

Ce impact are schema de partiționare A/B asupra stocării unui dispozitiv?

Faptul că actualizările fără întreruperi au ca rezultat o mulțime de partiții duplicate înseamnă că pierzi o grămadă de spațiu de stocare? Deloc. Google spune că dispozitivele cu suport de actualizare fără întreruperi ar trebui să scadă doar cu câteva sute de megaocteți datorită eliminării partițiilor /cache și /recovery. Eliminarea ambelor echilibrează costul adăugării unui al doilea set de partiții. Potrivit Google, imaginea sistemului A/B a Pixel are jumătate din dimensiunea imaginii sistemului A-only. Majoritatea utilizării suplimentare de stocare provine de fapt din adăugarea unei a doua partiții de furnizor. Acest lucru are sens, deoarece partiția furnizorului găzduiește toate binarele proprietare utilizate de OEM (parte din Project Treble), așa că este de așteptat să ocupe destul de mult spațiu. Deși Google nu recomandă să aveți partiționare A/B pe dispozitivele cu 4 GB spațiu de stocare (deoarece este aproape 10% din spațiul de stocare total disponibil), o recomandă pe dispozitivele cu 8 GB și mai mult.

Iată o detaliere a spațiului de stocare utilizat pe un Google Pixel cu și fără partiții A/B.

Dimensiunile partițiilor

A/B

Doar A

Bootloader

50 MB*2

50 MB

Boot

32 MB*2

32 MB

Recuperare

32 MB

Cache

100 MB

Radio

70MB*2

70 MB

Furnizor

300MB*2

300 MB

Sistem

2048MB*2

4096 MB

Total

5000 MB

4680 MB

Ce s-a întâmplat cu partiția de recuperare?

Nucleul Linux de bază pe dispozitivele Android este ceea ce îi permite lui Android să recunoască și să utilizeze hardware-ul corect pe un smartphone. Pe dispozitivele Android numai A, aveți, în general, două versiuni ale nucleului: una este împachetată în interiorul partiției de recuperare, în timp ce cealaltă se află în partiția de pornire. Pe dispozitivele A/B care acceptă actualizări fără întreruperi, recuperarea este acum în interiorul imaginii de pornire împreună cu nucleul. Funcția principală a recuperării a fost de a instala actualizări, dar din moment ce acestea sunt gestionate de sistemul însuși (update_engine) în timp ce Android este pornit, partiția de recuperare dedicată nu mai este necesară.

Pentru a instala o recuperare personalizată pe dispozitivele A/B, trebuie astfel să modificăm partiția de boot și să înlocuim recuperarea stocului cu propria noastră. Acesta este motivul pentru care pentru a instala TWRP trebuie să utilizați o comandă fastboot pentru a porni mai întâi o imagine de boot personalizată și apoi flash scriptul de instalare TWRP, deoarece fastboot nu poate corecta partițiile - doar flash peste ele în întregime. Din punct de vedere tehnic, ați putea pre-patch imaginea de pornire existentă cu TWRP și apoi flash-o prin fastboot, dar asta este mai multă problemă decât merită. Scriptul de instalare TWRP patchează ambele partiții boot_a și boot_b pentru a instala TWRP.

Fapt distractiv: Android update_engine care se ocupă de actualizări fără întreruperi este practic extras direct din sistemul de operare Chrome. Doar recent au fost șiruri care conțineau „Chrome OS” eliminate din jurnalul update_engine pentru a evita confuzia pentru oricine care se întâmplă să verifice logcat.

Telefonul meu Android acceptă partiții A/B pentru actualizări fără întreruperi?

In timp ce noi păstrați o listă cu toate dispozitivele care o susțin, de asemenea, vă puteți verifica cu ușurință.


Cum afectează actualizările fără probleme dezvoltarea personalizată?

Percepția utilizatorului asupra partițiilor A/B

Considerate de mulți utilizatori un obstacol în calea dezvoltării de software personalizat, actualizările fără întreruperi sunt de fapt un avantaj pentru dezvoltatori. Motivul pentru care dispozitivele A/B sunt percepute ca având un suport slab pentru dezvoltare se reduce la prețul primelor dispozitive A/B. La urma urmei, dispozitivele Google Pixel au fost unele dintre primele care au acceptat actualizări fără întreruperi și, în comparație cu smartphone-urile Nexus de altădată, au fost relativ scumpe. În plus, datorită multitudinii de îmbunătățiri pe care Google le-a adus sistemului de operare Android, care a creat ROM-uri personalizate și modificări mai puțin populare pe dispozitivele Google, smartphone-urile Google Pixel nu au decolat pe forumurile noastre la fel de bine ca Nexus smartphone-uri. O combinație de factori externi a condus la o scădere a dezvoltării personalizate pe smartphone-urile Google Pixel, deși majoritatea utilizatorilor au ales să dea vina pe suportul partițiilor A/B. Comparați disponibilitatea dezvoltării personalizate pe dispozitive precum Google Pixel cu dispozitive precum Xiaomi Mi A1 pe forumurile noastre.

În plus, lipsa de înțelegere a modului în care partițiile A/B au schimbat modul în care utilizatorii trebuie să instaleze ROM-uri personalizate, nuclee, recuperări și modificări a dus la nepopularea suportului pentru partițiile A/B. Cu recuperarea care trăiește acum în interiorul imaginii de pornire, modificările intermitente în ordinea greșită, cum ar fi Magisk sau Xposed, pot provoca conflicte și pot duce la o buclă de pornire. În ce ordine afișați aceste moduri poate fi importantă, deși în cazul ROM-urilor personalizate nu ar trebui să vă faceți griji cu privire la slotul în care faceți intermitent. Contrar credinței obișnuite, scriptul de instalare pentru majoritatea ROM-urilor personalizate nu clipește în ambele sloturi. În mare parte, nu trebuie să vă faceți griji pentru asta, deoarece nu ar trebui să schimbați sloturile manual.

Cum văd dezvoltatorii partițiile A/B

Când construiesc un ROM, dezvoltatorii pot folosi ambele partiții pentru a testa build-uri separate. Dacă unul nu funcționează, pot reveni la partiția de lucru și pot reconstrui ROM-ul. De asemenea, dezvoltatorii pot testa regresii prin simpla instalare a unei actualizări, schimbând partiția activă și comparând cele două fără a fi nevoie să ștergeți datele. Iată cum vede echipa LineageOS suportul pentru partiții A/B:

„Mulți din comunitatea Android au criticat A/B ca fiind „greu de susținut” și „nu este prietenos cu dezvoltatorii”, când, de fapt, implementat corespunzător, este mai usor de sustinut și la fel de prietenos cu dezvoltatorii." - jrizzoli, Jurnalul modificărilor LineageOS 19

Dificultatea inițială cu suportul A/B pentru dezvoltatori a venit din modificarea instrumentelor existente pentru a susține aceste dispozitive. Dezvoltatorul Magisk, topjohnwu, a adăugat suport oficial pentru Google Pixel la un an după ce a fost eliberat — nu pentru că era dificil, ci mai degrabă pentru că i-a luat un an să obțină efectiv dispozitivul lucra la. Suport TWRP a venit destul de repede pe dispozitivele A/B, după ce dezvoltatorul principal, Dees_Troy, s-a lovit de el. LineageOS 15.1 suportă acum Dispozitive A/B după ce voluntarii au găsit timp să-și repare scriptul addon.d.

Cum să actualizați un dispozitiv A/B care are o recuperare personalizată, un nucleu sau alte moduri

ROM-uri personalizate

Afișarea actualizărilor pe un dispozitiv cu un ROM personalizat înseamnă că va trebui să fiți atenți și la ce slot intermiteți, nu? Nu chiar. TWRP se va ocupa de fapt de o mulțime de asta pentru tine și este implicit la slotul inactiv pentru flash-ul unui ROM personalizat. Dacă slotul dvs. activ este A și flashați un ROM personalizat, de fapt clipiți în slotul B. Când reporniți, slotul activ este acum B. Dezvoltatorii pot modifica scriptul de instalare și pot flash-o pe ambele sloturi pentru a facilita utilizatorul final, deși majoritatea scripturilor personalizate de instalare a ROM-ului în prezent flash numai într-un singur slot. În cele din urmă, ROM-urile personalizate pot implementa un update A/B în ROM-ul lor, astfel încât utilizatorii să nu fie nevoie nici măcar să se încurce cu actualizări intermitente manual — cel mai recent LineageOS 15.1 include un instrument Lineage Updater și XDA Senior Member SUA-RedDragon făcut o actualizator generic A/B pe care alți dezvoltatori îl pot folosi.

Stoc de ROM-uri

Dar nu este problema dacă dispozitivul tău rulează ROM-ul stoc cu diverse modificări și vrei să instalezi o actualizare fără a pierde toate aceste moduri? Poate fi dacă nu cunoașteți pașii potriviți pentru a instala o actualizare. Pe OnePlus 6, de exemplu, nu puteți flash o OTA incrementală pe dispozitivul dvs. modificat, deoarece OTA incrementală va încerca să corecească imaginea de pornire modificată. Astfel, probabil veți ajunge cu o buclă de pornire și de aceea trebuie să flash actualizarea completă a ROM-ului pentru a suprascrie complet imaginea de pornire modificată. Iată pașii generali pe care trebuie să îi urmați pentru a instala o actualizare OxygenOS pe OnePlus 6, păstrând în continuare TWRP, Magisk și, opțional, un nucleu personalizat.

  1. S-a descărcat cel mai recent ROM complet fermoar
  2. Flash-ul complet ROM-ului în recuperare
  3. (Opțional) Nucleu personalizat Flash
  4. Instalator Flash TWRP
  5. Reporniți imediat înapoi la recuperare
  6. Flash Magisk

Pe dispozitivele Google Pixel, puteți flash imaginea din fabrică fără a șterge datele, apoi porniți TWRP, instalați TWRP prin scriptul de instalare, apoi instalați Magisk.

Extragerea unei actualizări pentru flash-ul imaginilor partițiilor individuale

Fișierele de actualizare pentru multe dispozitive A/B sunt puțin diferite în comparație cu dispozitivele numai A. Nu mai sunt doar un fișier zip care conține o mulțime de imagini (cu excepția imaginilor din fabrică Google și Razer), ci sunt sub forma unui fișier payload.bin. Puteți extrage acest fișier și flash fiecare parte manual, dar necesită un instrument special pentru a face acest lucru. Dacă sunteți interesat să învățați cum să faceți acest lucru pe OnePlus 6, Xiaomi Mi A1 și multe alte dispozitive A/B, citiți mai departe.

Configurarea extragerii payload.bin

  1. Asigurați-vă că aveți Python 3.6 instalat.
  2. Descărcați payload_dumper.py și update_metadata_pb2.py Aici.
  3. Extrageți zip-ul OTA și plasați payload.bin în același folder cu aceste fișiere.
  4. Deschideți PowerShell, Command Prompt sau Terminal, în funcție de sistemul de operare.
  5. Introduceți următoarea comandă: python -m pip install protobuf
  6. Când s-a terminat, introduceți această comandă: python payload_dumper.py payload.bin
  7. Aceasta va începe să extragă imaginile din fișierul payload.bin în folderul curent în care vă aflați.

Puteți să flashați fiecare dintre aceste imagini separat acum prin fastboot, dacă doriți. Următoarea secțiune vă arată cum să faceți asta.

Utilizarea fastboot pentru a flash imagini pe un dispozitiv care acceptă actualizări fără întreruperi

Există o serie de comenzi care sunt exclusive pentru dispozitivele sistemului de partiție A/B. Puteți să vă schimbați slotul activ și să flashați la anumite sloturi. Dacă aveți un Project Treble-dispozitiv compatibil și vrei să înveți cum flash Imagini de sistem generice, ar trebui să fii familiarizat cu aceste comenzi. Aruncă o privire la tabelul de mai jos.

Comenzi Fastboot

Comanda

Obțineți slotul activ curent

fastboot getvar all | grep „current-slot”Dacă sunteți pe un computer cu Windows, comanda „grep” nu va funcționa.

Setați alt slot ca activ

fastboot set_active other

Setați slotul specificat ca activ

fastboot set_active $ORfastboot --set-active=_$slot unde $ este fie a, fie b

Flash imaginea către partiția specificată în slotul curent

fastboot flash partition partition.img

Flash imaginea către partiția specificată în slotul specificat

fastboot flash partition_a partition.imgfastboot flash partition_b partition.img

(Notă: Pe dispozitivele A/B, puteți fie să specificați o partiție într-un anumit slot în care să flashați, fie puteți să omiteți sufixul slotului și acesta va clipi în slotul activ curent. De exemplu, puteți înlocui „partiția” în comanda flash cu „sistem”, „sistem_a” sau „sistem_b.”)

Pe computerele Windows, nu puteți utiliza grep, așa că eliminați acea parte și căutați „slot curent”.

Un cuvânt despre Project Treble și actualizări fără întreruperi

O concepție greșită comună este că suportul pentru Project Treble și suportul pentru partiția A/B sunt legate unul de celălalt, dar nu este chiar așa. A avea una nu implică cealaltă. Motorola Moto Z2 Force folosește o schemă de partiționare A/B, dar nu acceptă Treble. Pe de altă parte, Honor 9 Lite acceptă Project Treble, dar este un dispozitiv doar A.

Honor 9 Lite acceptă Project Treble, dar nu acceptă actualizări fără întreruperi

Întrebări frecvente/Rezumat

  • Care sunt beneficiile partiționării A/B?
    • Partiționarea A/B vă permite să vă actualizați smartphone-ul Android în timp ce îl utilizați, pur și simplu repornind atunci când sunteți gata să porniți în noua versiune. De asemenea, acționează ca protecție împotriva cărămizilor - dacă actualizarea nu merge bine, veți reveni la instalarea de lucru.
  • Partiționarea A/B împiedică dezvoltarea?
    • Deși dezvoltatorilor le-a luat ceva timp să se adapteze, răspunsul este aproape nu. De fapt, poate ajuta dezvoltatorii, deoarece își pot porni dual ROM-ul personalizat cu versiunea veche și cu o nouă versiune de testare pentru a verifica regresiile.
  • Cum afectează partițiile A/B modurile, cum ar fi nucleele personalizate, Magisk sau Xposed?
    • Trebuie să fii atent când le instalezi, dar în prezent nu există probleme. Magisk acceptă oficial dispozitivele cu actualizări fără întreruperi și, atâta timp cât flashezi lucrurile în ordinea corectă, nu ar trebui să ai probleme. Asigurați-vă că flashați kernelul personalizat înainte de a afișa celelalte moduri și ar trebui să fiți gata.
  • Pot să flash două ROM-uri diferite pe fiecare partiție și dual boot?
    • În teorie, da. Problemele apar din cauza partiției de date partajate, deci nu este recomandat.
  • A avea o schemă de partiție A/B înseamnă că am spațiu de stocare redus?
    • Nu! Google spune că dispozitivele care acceptă actualizări fără întreruperi sacrifică doar câteva sute de megaocteți de spațiu de stocare pentru a-l susține. Beneficiile depășesc acest cost.
  • Dispozitivul meu acceptă partiții A/B, înseamnă asta că pot folosi o imagine de sistem generică Project Treble?
    • Nu neaparat. Proiectul Treble și suportul A/B nu au legătură. Motorola Moto Z2 Force nu acceptă Project Treble, dar acceptă schema de partiție A/B.
  • Dispozitivul meu acceptă Project Treble, înseamnă că am o schemă de partiție A/B?
    • Acesta nu este întotdeauna cazul. Honor 9 Lite este un exemplu excelent, deoarece acceptă Project Treble, dar nu are o schemă de partiție A/B.
  • De ce trebuie să pornesc mai întâi TWRP cu fastboot și apoi să-l flash?
    • Acest lucru se datorează modului în care funcționează fastboot și faptului că partiția de recuperare nu mai există. Recuperarea este plasată în interiorul partiției de boot, așa că trebuie să modificăm atât boot_a, cât și boot_b. Nu puteți corecționa o partiție în fastboot, ci doar flash peste ea. Ați putea, în teorie, să faceți o imagine de pornire prepatchată și apoi să flashați în schimb.
  • Există pericole cu partițiile A/B? Cum afectează protecția împotriva derulării lucrurile?
    • Google a încercat din răsputeri să facă ca aceasta să nu fie o problemă, ci în cazul Motorola Moto Z2 Forțat, au fost cunoscute cazuri în care un dispozitiv a reactivat slotul mai vechi după actualizarea la Android Oreo. Acest lucru a însemnat că a început protecția împotriva derulării, iar proprietarii de dispozitive și-au putut salva smartphone-ul doar cu recuperarea EDL. Totuși, Google spune că protecția împotriva derulării se activează numai după prima pornire, așa că slotul trebuie să funcționeze pe deplin după o actualizare înainte de a nu mai putea face downgrade.