Morda ste že slišali za brezšivne posodobitve. Vključuje nekaj, kar se imenuje "A/B particije." Kaj je to in kako vpliva na razvoj po meri na XDA?
Ko je izšel Android Nougat, smo o njem govorili vse vrste novih funkcij. Za začetek smo dobili na novo posodobljen uporabniški vmesnik skupaj z dolgo pričakovanimi zmogljivostmi za več oken in podporo za Vulkan Graphics API. Večini uporabnikov pa je na glavo zletel en dodatek pod pokrovom. Android Nougat je predstavil "nemotene posodobitve" na napravah, ki podpirajo particije A/B. Velika večina obstoječih naprav Android (razen novih Google Pixel in Google Pixel XL) takrat ni imela A/B particij in zato ni mogla izkoristiti brezhibnih posodobitev. Osnovna predpostavka te funkcije je, da ima naprava drugi niz sistemskih, zagonskih, prodajalčevih in drugih pomembnih particij, in ko dobite OTA posodobitev se posodobitev izvede v ozadju, medtem ko se drugi niz particij popravi, kar vam omogoča nemoten ponovni zagon v posodobljeni različici programske opreme. Če posodobitev ne uspe, boste vrnjeni nazaj v delujočo zgradbo, kar pomeni, da bodo imela podjetja manj glavobolov, potrošniki pa bodo bolje zaščiteni.
Podpora brezhibnih posodobitev ni pogoj za nobeno novo napravo Android, za razliko od Project Treble. Kot taka velika večina novih naprav Android ne podpira te funkcije. Doslej smo vodili seznam vseh podprtih naprav, in jasno je, da ta funkcija ni široko podprta. To je škoda, ker particije A/B prinašajo veliko prednosti tako običajnim uporabnikom kot naprednim uporabnikom. Vendar pa je funkcija v skupnosti navdušencev nekoliko na slabem glasu, ker se domneva, da otežuje razvoj Androida in utripajoče spremembe po meri. To pravzaprav ni tako, zato smo želeli demistificirati brezhibne posodobitve in razložiti, kako A/B particije vplivajo na razvoj po meri na XDA.
Najlepša hvala starejšemu članu XDA npjohnson, a sodelavec LineageOS in vzdrževalec Motorola Moto Z2 Force, ki nam je pomagal preveriti ta članek.
Particije v napravi Android
Particija je preprosto ločen del v notranjem pomnilniku telefona, kjer se hranijo podatki. Kakšni podatki se hranijo na vsaki particiji, je odvisno od strojne opreme, operacijskega sistema in številnih drugih dejavnikov. Zagonski nalagalnik bo imel enega, sistem (Android OS) bo imel enega, uporabniški podatki bodo imeli enega... in tako naprej in tako naprej. Ko vidite, da ljudje govorijo o "/system" in "/cache", se sklicujejo na dana imena teh particij. OnePlus 6 ima na primer 72 predelnih sten. To se sliši veliko, vendar je OnePlus 6 ena od naprav, ki podpira brezhibne posodobitve, kar pomeni, da je veliko teh particij preprosto dvojnikov druga druge.
Delni izhod particij na OnePlus 6. Nekatere A/B particije so podčrtane za namene predstavitve.
V napravi je veliko particij, za katere vam kot uporabniku nikoli ne bo treba skrbeti. Mnoge od teh particij se nikoli ne spremenijo pri utripanju prilagojenih ROM-ov, jeder, obnovitev ali sprememb, kot sta Magisk ali Xposed. Veliko teh particij bo bodisi neuporabljenih za naše namene bodisi prenevarnih, da bi se jih dotaknili, če ne veste, kaj počnete (XLOADER in OEMINFO na Huawei/Honor naprave pridejo na misel.) Za veliko večino uporabnikov Androida so particije, s katerimi se večinoma ukvarjamo, sistem, zagon, obnovitev, uporabniški podatki in v zadnjem času prodajalec in vbmeta. Tukaj je kratka razlaga namena vsake particije:
- sistem - vsebuje operacijski sistem Android, sistemske knjižnice, sistemske aplikacije in druge sistemske medije, kot so zagonske animacije, osnovna ozadja, melodije zvonjenja itd.
- zagon - vsebuje jedro, pomnilniški disk in na A/B napravah tudi obnovitev
- obnovitev - zadrži obnovitev, kjer se TWRP najpogosteje utripa na napravah samo A (naprave A/B nimajo namenske obnovitvene particije)
- uporabniški podatki - hrani vse vaše podatke o aplikaciji, sistemu in notranjem pomnilniku
- prodajalec - vsebuje HAL-je, specifične za platformo in napravo, datoteke, potrebne za komunikacijo operacijskega sistema Android z osnovno strojno opremo
- vbmeta - particija za Android Verified Boot 2.0, ki preverja celovitost zagonskega procesa
Proizvajalci originalne opreme naprav lahko spremenijo svoje particijske sheme, da uporabljajo poljubno postavitev. Huawei na primer razdeli zagonsko particijo na ramdisk_recovery in jedro. Obstaja tudi veliko dodatnih particij, ki lahko vsebujejo druge sistemske aplikacije, kot so cust, product in oem, in medtem ko te je varno spreminjati, na splošno ni priporočljivo, če si želite olajšati vrnitev na zalogo. Kje imajo torej A/B particije vlogo?
A/B pregradna shema
Kako posodobitve delujejo na napravah z brezhibnimi posodobitvami
Zelo preprosta slika, ki sem jo naredil spodaj, prikazuje, kako poteka posodobitev v napravi s podporo za particijo A/B. Particija, ki je prikazana, je sistemska particija, čeprav se lahko tudi druge particije, kot sta zagon in prodajalec, posodobijo s katero koli posodobitvijo OTA proizvajalca originalne opreme. Ta postopek posodabljanja se zgodi ne le z večjimi posodobitvami različice Androida, ampak tudi s posodobitvami varnostnih popravkov.
- Začnemo z dvema sistemskima particijama, system_a in system_b, obe v isti različici Androida.
- Ob predpostavki, da je system_a aktiven, bo posodobitev OTA popravila system_b, neaktivno particijo, v ozadju.
- sistem_a je nastavljen na neaktiven in sistem_b postane aktiven, ko se uporabnik znova zažene.
- Zdaj neaktivna particija, system_a, bo posodobljena, ko bo uvedena naslednja posodobitev OTA.
Kakšne so prednosti tega postopka posodobitve?
- Če posodobitev ne uspe, se naprava povrne na delujočo zgradbo na drugi reži.
- Vaši podatki ostanejo popolnoma nedotaknjeni, tudi če je posodobitev neuspešna, saj obstaja samo ena particija (userdata), v kateri so vaši podatki.
- Posodobitev pretakanja: Če je vaša podatkovna particija polna, lahko posodobitev prenesete in pretakate v neaktivno režo. To je precej čedna funkcija in pomeni, da vam za posodobitve ni treba zapravljati začasne shrambe. Zato na napravah A/B ni particije predpomnilnika, saj niso več potrebne.
Kakšen vpliv ima shema particioniranja A/B na shranjevanje naprave?
Ali dejstvo, da brezhibne posodobitve povzročijo kup podvojenih particij, pomeni, da izgubljate veliko prostora za shranjevanje? Sploh ne. Google pravi, da bi morale naprave z brezhibno podporo za posodabljanje manjkati le približno nekaj sto megabajtov, zahvaljujoč odstranitvi particij /cache in /recovery. Odstranitev obeh uravnoteži stroške dodajanja drugega niza particij. Po Googlovih besedah je slika sistema Pixel A/B pol manjša od slike sistema samo A. Večina dodatne uporabe prostora za shranjevanje dejansko izvira iz dodajanja druge particije proizvajalca. To je smiselno, saj particija prodajalca vsebuje vse lastniške binarne datoteke, ki jih uporabljajo proizvajalci originalne opreme (del projekta Treble), zato se pričakuje, da bo zavzela kar nekaj prostora. Medtem ko Google ne priporoča A/B particioniranja na napravah s 4 GB pomnilnika (ker je to skoraj 10 % celotnega razpoložljivega pomnilnika), ga priporoča v napravah z 8 GB in več.
Tukaj je razčlenitev prostora za shranjevanje, uporabljenega v Google Pixel s particijami A/B in brez njih.
Velikosti particij |
A/B |
A-samo |
---|---|---|
Zagonski nalagalnik |
50MB*2 |
50 MB |
Zagon |
32MB*2 |
32 MB |
Obnovitev |
32 MB |
|
predpomnilnik |
100 MB |
|
Radio |
70MB*2 |
70 MB |
Prodajalec |
300MB*2 |
300 MB |
Sistem |
2048 MB*2 |
4096 MB |
Skupaj |
5000 MB |
4680 MB |
Kaj se je zgodilo z obnovitveno particijo?
Osnovno jedro Linuxa v napravah Android je tisto, kar Androidu omogoča prepoznavanje in pravilno uporabo strojne opreme na pametnem telefonu. V napravah Android samo A imate običajno dve različici jedra: ena je zapakirana znotraj obnovitvene particije, druga pa je v zagonski particiji. Na napravah A/B, ki podpirajo brezhibne posodobitve, je obnovitev zdaj znotraj zagonske slike skupaj z jedrom. Glavna funkcija obnovitve je bila namestitev posodobitev, ker pa to ureja sistem sam (update_engine), medtem ko je Android zagnan, namenska obnovitvena particija ni več potrebna.
Za namestitev obnovitve po meri na naprave A/B moramo spremeniti zagonsko particijo in zamenjati osnovno obnovitev z lastno. Zato morate za namestitev TWRP uporabiti ukaz fastboot, da najprej zaženete zagonsko sliko po meri in potem bliskajte namestitveni skript TWRP, saj hitri zagon ne more popraviti particij – samo flash preko njih v celoti. Tehnično bi lahko svojo obstoječo zagonsko sliko predhodno popravili s TWRP in jo nato zagnali prek hitrega zagona, vendar je to več težav, kot je vredno. Skript namestitvenega programa TWRP popravi particiji boot_a in boot_b za namestitev TWRP.
Zanimivost: Android update_engine, ki upravlja brezhibne posodobitve, je v bistvu iztrgan neposredno iz OS Chrome. Šele pred kratkim so bili nizi, ki vsebujejo "Chrome OS", odstranjeni iz dnevnika update_engine, da bi se izognili zmedi za vsakogar, ki slučajno preveri logcat.
Ali moj pametni telefon Android podpira particije A/B za brezhibne posodobitve?
Medtem ko mi imejte seznam vseh naprav ki ga podpirajo, lahko tudi sami enostavno preverite.
Kako brezhibne posodobitve vplivajo na razvoj po meri?
Uporabniško dojemanje A/B particij
Številni uporabniki menijo, da predstavljajo oviro pri razvoju programske opreme po meri, brezhibne posodobitve pa so za razvijalce pravzaprav korist. Razlog, da imajo A/B naprave slabo razvojno podporo, je cena prvih A/B naprav. Navsezadnje so bile naprave Google Pixel med prvimi, ki so podpirale brezhibne posodobitve, in v primerjavi s pametnimi telefoni Nexus iz preteklosti so bile relativno drage. Poleg tega je Google zahvaljujoč številnim izboljšavam operacijskega sistema Android, ki je izdelal prilagojene ROM-e in modifikacije, ki so manj priljubljene na Googlovih napravah, pametni telefoni Google Pixel na naših forumih niso dosegli niti približno tako dobrega uspeha kot Nexus pametni telefoni. Kombinacija zunanjih dejavnikov je privedla do zmanjšanja razvoja po meri na pametnih telefonih Google Pixel, čeprav se je večina uporabnikov namesto tega odločila kriviti podporo za particijo A/B. Primerjajte razpoložljivost razvoja po meri v napravah, kot je Google Pixel, z napravami, kot je Xiaomi Mi A1 na naših forumih.
Poleg tega je pomanjkanje razumevanja, kako so particije A/B spremenile način, kako morajo uporabniki namestiti ROM-e po meri, jedra, obnovitve in spremembe, povzročilo, da je podpora za particije A/B nepriljubljena. Ker obnovitev zdaj živi znotraj zagonske slike, lahko utripajoče spremembe v napačnem vrstnem redu, kot sta Magisk ali Xposed, povzročijo konflikte in lahko povzročijo zagonsko zanko. Vrstni red, v katerem utripate te modifikacije, je lahko pomemben, čeprav vam v primeru ROM-ov po meri ne bi smelo skrbeti, v katero režo utripate. V nasprotju s splošnim prepričanjem se namestitveni skript za večino ROM-ov po meri ne utripa v obe reži. Večinoma vam to ni treba skrbeti, saj vam ne bi bilo treba ročno zamenjati rež.
Kako razvijalci gledajo na particije A/B
Pri gradnji ROM-a lahko razvijalci uporabijo obe particiji za testiranje ločenih gradenj. Če ena ne deluje, se lahko preprosto vrnejo nazaj na delujočo particijo in znova zgradijo svoj ROM. Razvijalci lahko tudi preizkusijo regresije tako, da preprosto namestijo posodobitev, preklopijo aktivno particijo in primerjajo obe, ne da bi morali izbrisati podatke. Takole skupina LineageOS gleda na podporo za particijo A/B:
»Mnogi v skupnosti Android so kritikovali A/B kot 'težko za podporo' in 'ni prijazen do razvijalcev', čeprav je v resnici pravilno implementiran lažje podpirati in prav tako prijazen razvijalcem." - jrizzoli, Dnevnik sprememb LineageOS 19
Začetne težave s podporo A/B za razvijalce so nastale zaradi spreminjanja njihovih obstoječih orodij za podporo tem napravam. Razvijalec Magiska, topjohnwu, je dodal uradno podporo za Google Pixel leto po tem, ko je bil izdal – ne zato, ker je bilo težko, temveč zato, ker je potreboval eno leto, da je napravo dejansko pridobil delati na. Podpora za TWRP prišel precej hitro na napravah A/B, potem ko je vodilni razvijalec, Dees_Troy, to naredil. LineageOS 15.1 zdaj podpira Naprave A/B, potem ko so prostovoljci našli čas, da popravijo svoj skript addon.d.
Kako posodobiti napravo A/B, ki ima obnovitev po meri, jedro ali druge modifikacije
ROM-i po meri
Utripanje posodobitev v napravi s prilagojenim ROM-om pomeni, da boste morali biti previdni tudi pri tem, katero režo utripate, kajne? Ne čisto. TWRP bo dejansko poskrbel za veliko tega namesto vas in je privzeto nastavljen na neaktivno režo za utripanje ROM-a po meri. Če je vaša aktivna reža A in utripate ROM po meri, dejansko utripate v režo B. Ko znova zaženete, je aktivna reža B. Razvijalci lahko spremenijo namestitveni skript in utripajo v obe reži, da olajšajo delo končnemu uporabniku, čeprav večina namestitvenih skriptov ROM-a po meri trenutno utripa samo v eno režo. Nazadnje, ROM-i po meri lahko v svoj ROM implementirajo program za posodobitev A/B, tako da se uporabnikom sploh ni treba zapletati z ročno utripanje posodobitev – najnovejši LineageOS 15.1 vključuje orodje Lineage Updater in XDA Senior Member ZDA-RedDragon narediti generični A/B posodobitveni program ki jih lahko uporabljajo drugi razvijalci.
Zaloge ROM-ov
Toda ali ni problematično, če vaša naprava uporablja osnovni ROM z različnimi modifikacijami in želite namestiti posodobitev, ne da bi izgubili vse te modifikacije? Lahko se zgodi, če ne poznate pravih korakov za namestitev posodobitve. Na OnePlus 6, na primer, ne morete bliskati inkrementalne OTA na vaši spremenjeni napravi, ker bo inkrementalna OTA poskušala popraviti vašo spremenjeno zagonsko sliko. Tako boste verjetno na koncu imeli zagonsko zanko in zato morate posodobiti celotno posodobitev ROM-a, da popolnoma prepišete spremenjeno zagonsko sliko. Tukaj so splošni koraki, ki jih morate narediti, da namestite posodobitev OxygenOS na vaš OnePlus 6, medtem ko še vedno obdržite TWRP, Magisk in po želji jedro po meri.
- Preneseno najnovejšo poln ROM zip
- Flash polni ROM zip v obnovitvi
- (Izbirno) Flash jedro po meri
- Namestitveni program Flash TWRP
- Znova zaženite takoj nazaj v obnovitev
- Flash Magisk
V napravah Google Pixel lahko bliskajte tovarniško sliko brez brisanja podatkov, nato zaženite TWRP, namestite TWRP prek namestitvenega skripta in nato namestite Magisk.
Ekstrahiranje posodobitve za bliskovne slike posameznih particij
Posodobitvene datoteke za številne naprave A/B so nekoliko drugačne v primerjavi z napravami samo A. Niso več le zip datoteke, ki vsebujejo veliko slik (razen Googlovih in Razerjevih tovarniških slik), temveč so v obliki datoteke payload.bin. To datoteko lahko izvlečete in ročno utripate vsak del, vendar za to potrebujete posebno orodje. Če vas zanima, kako to storiti na OnePlus 6, Xiaomi Mi A1 in mnogih drugih A/B napravah, berite dalje.
Nastavitev za ekstrahiranje payload.bin
- Preverite, ali imate Python 3.6 nameščen.
- Prenesite payload_dumper.py in update_metadata_pb2.py tukaj.
- Ekstrahirajte vaš OTA zip in postavite payload.bin v isto mapo kot te datoteke.
- Odprite PowerShell, ukazni poziv ali terminal, odvisno od vašega OS.
- Vnesite naslednji ukaz:
python -m pip install protobuf
- Ko je to končano, vnesite ta ukaz:
python payload_dumper.py payload.bin
- To bo začelo ekstrahirati slike v datoteki payload.bin v trenutno mapo, v kateri ste.
Če želite, lahko vsako od teh slik prek hitrega zagona utripate posebej. Naslednji razdelek vam pokaže, kako to storite.
Uporaba hitrega zagona za bliskavico slik v napravi, ki podpira brezhibne posodobitve
Obstaja več ukazov, ki so izključni za sistemske particijske naprave A/B. Svojo aktivno režo in flash lahko spremenite v določene reže. Če imate Project Treble-združljivo napravo in se želite naučiti, kako flash Generične sistemske slike, morate poznati te ukaze. Oglejte si spodnjo tabelo.
Ukazi za hitri zagon |
Ukaz |
---|---|
Pridobite trenutno aktivno režo |
hitri zagon getvar vse | grep "current-slot" Če uporabljate računalnik z operacijskim sistemom Windows, ukaz "grep" ne bo deloval. |
Nastavite drugo režo kot aktivno |
fastboot set_active drugo |
Nastavite določeno režo kot aktivno |
fastboot set_active $ALIfastboot --set-active=_$reža, kjer je $ a ali b |
Flash sliko na določeno particijo v trenutni reži |
fastboot flash particija partition.img |
Flash sliko na določeno particijo v določeni reži |
fastboot flash partition_a partition.imgfastboot flash partition_b partition.img |
(Opomba: Na napravah A/B lahko določite particijo v določeni reži za bliskavico ali pa izpustite pripono reže in se bo bliskavila v trenutno aktivno režo. Na primer, "particijo" v ukazu flash lahko zamenjate s "system", "system_a" ali "system_b.")
Beseda o Project Treble in brezhibnih posodobitvah
Pogosta napačna predstava je, da sta podpora za Project Treble in podpora za particijo A/B medsebojno povezani, vendar to dejansko ni tako. Imeti eno ne pomeni drugega. Motorola Moto Z2 Force uporablja shemo particioniranja A/B, vendar ne podpira visokih tonov. Po drugi strani pa Honor 9 Lite podpira Project Treble, vendar je naprava samo A.
Pogosto zastavljena vprašanja/povzetek
-
Kakšne so prednosti A/B particioniranja?
- A/B particioniranje vam omogoča, da posodobite svoj pametni telefon Android med uporabo, tako da ga preprosto znova zaženete, ko ste pripravljeni na zagon nove različice. Deluje tudi kot zaščita pred opekami - če gre posodobitev narobe, se boste vrnili na delujočo namestitev.
-
Ali A/B particioniranje ovira razvoj?
- Čeprav so razvijalci vzeli nekaj časa, da so se prilagodili, je odgovor skoraj ne. Pravzaprav lahko razvijalcem pomaga, saj lahko dvojno zaženejo svoj ROM po meri s staro različico in novo preskusno različico, da preverijo regresije.
-
Kako particije A/B vplivajo na modifikacije, kot so jedra po meri, Magisk ali Xposed?
- Pri nameščanju morate biti previdni, vendar trenutno ni težav. Magisk uradno podpira naprave z brezhibnimi posodobitvami in dokler stvari utripate v pravem vrstnem redu, ne bi smeli imeti težav. Prepričajte se, da ste utripali jedro po meri, preden utripate druge modifikacije, in že bi morali biti pripravljeni.
-
Ali lahko zaženem dva različna ROM-a na vsako particijo in dvojni zagon?
- V teoriji ja. Težave pa nastanejo zaradi skupne podatkovne particije, zato ni priporočljivo.
-
Ali to, da imam particijsko shemo A/B, pomeni, da imam manj prostora za shranjevanje?
- Ne! Google pravi, da naprave, ki podpirajo brezhibne posodobitve, žrtvujejo le nekaj sto megabajtov prostora za shranjevanje. Koristi odtehtajo te stroške.
-
Moja naprava podpira A/B particije, ali to pomeni, da lahko uporabljam generično sliko sistema Project Treble?
- Ni nujno. Project Treble in podpora A/B nista povezani. Motorola Moto Z2 Force ne podpira Project Treble, vendar podpira particijsko shemo A/B.
-
Moja naprava podpira Project Treble, ali to pomeni, da imam particijsko shemo A/B?
- Ni vedno tako. Honor 9 Lite je odličen primer, saj podpira Project Treble, vendar nima sheme particije A/B.
-
Zakaj moram najprej zagnati TWRP s hitrim zagonom in ga nato flash?
- To je zaradi načina delovanja hitrega zagona in dejstva, da obnovitvena particija ne obstaja več. Obnovitev je nameščena znotraj zagonske particije, zato moramo spremeniti tako boot_a kot boot_b. V hitrem zagonu ne morete zakrpati particije, lahko jo samo flashate. V teoriji bi lahko naredili vnaprej popravljeno zagonsko sliko in jo nato namesto tega preklopili.
-
Ali obstajajo kakšne nevarnosti pri A/B predelnih stenah? Kako zaščita pred povrnitvijo vpliva na stvari?
- Google se je zelo potrudil, da to ne bi bila težava, vendar v primeru Motorola Moto Z2 Force so znani primeri, ko je naprava po nadgradnji na Android ponovno aktivirala starejšo režo Oreo. To je pomenilo, da se je začela zaščita pred povrnitvijo, lastniki naprav pa so lahko svoj pametni telefon rešili samo z obnovitvijo EDL. Google pravi, da se zaščita pred povrnitvijo zažene šele po prvem zagonu, zato mora reža popolnoma delovati po posodobitvi, preden ne morete več preiti na prejšnjo različico.