Misschien heb je al eerder van naadloze updates gehoord. Het gaat om iets dat 'A/B-partities' wordt genoemd. Wat is het en welke invloed heeft dit op de aangepaste ontwikkeling op XDA?
Toen Android Nougat werd uitgebracht, hadden we het erover allerlei nieuwe functies. We hebben een nieuw bijgewerkte gebruikersinterface om te beginnen, samen met langverwachte mogelijkheden voor meerdere vensters en Vulkan Graphics API-ondersteuning. Maar één toevoeging onder de motorkap vloog over de hoofden van de meeste gebruikers. Android Nougat heeft "Naadloze updates" geïntroduceerd op apparaten die A/B-partities ondersteunen. De overgrote meerderheid van de bestaande Android-apparaten (met uitzondering van de nieuwe Google Pixel en Google Pixel XL) hadden op dat moment geen A/B-partities en konden dus niet profiteren van naadloze updates. Het uitgangspunt van deze functie is dat het apparaat een tweede set systeem-, opstart-, leveranciers- en andere belangrijke partities heeft, en wanneer u een OTA krijgt update De update vindt plaats op de achtergrond terwijl de tweede set partities wordt gepatcht, waardoor u naadloos opnieuw kunt opstarten naar een bijgewerkte softwarebuild. Als een update mislukt, wordt u teruggezet naar een werkende build, wat betekent dat bedrijven minder kopzorgen hebben en consumenten beter beschermd zijn.
Het ondersteunen van naadloze updates is voor geen enkel nieuw Android-apparaat een vereiste, in tegenstelling tot Project Treble. Als zodanig ondersteunt de overgrote meerderheid van nieuwe Android-apparaten de functie niet. We hebben tot nu toe een lijst bijgehouden van alle ondersteunde apparaten, en het is duidelijk dat deze functie niet breed wordt ondersteund. Dat is jammer, want A/B-partities bieden veel voordelen voor zowel gewone gebruikers als ervaren gebruikers. De functie heeft echter een slechte reputatie in de enthousiaste gemeenschap, omdat wordt aangenomen dat het de ontwikkeling van Android en het flashen van aangepaste aanpassingen moeilijker maakt. Dit is in werkelijkheid niet het geval, dus wilden we naadloze updates demystificeren en uitleggen hoe A/B-partities de aangepaste ontwikkeling op XDA beïnvloeden.
Veel dank aan XDA Senior-lid npjohnson, A bijdrager aan LineageOS en onderhouder van de Motorola Moto Z2 Force, die ons heeft geholpen dit artikel te controleren.
Partities op een Android-apparaat
Een partitie is eenvoudigweg een afzonderlijk gedeelte van de interne opslag van de telefoon waar gegevens worden bewaard. Welk soort gegevens op elke partitie worden bewaard, is afhankelijk van de hardware, het besturingssysteem en vele andere factoren. De bootloader zal er één hebben, het systeem (Android OS) zal er één hebben, de gebruikersgegevens zullen er één hebben... enzovoort. Als je mensen ziet praten over "/system" en "/cache", verwijzen ze naar de opgegeven namen voor die partities. De OnePlus 6 heeft dat bijvoorbeeld wel 72 partities. Dat klinkt veel, maar de OnePlus 6 is een van de apparaten die naadloze updates ondersteunt, wat betekent dat veel van deze partities eenvoudigweg duplicaten van elkaar zijn.
Gedeeltelijke uitvoer van de partities op de OnePlus 6. Sommige A/B-partities zijn onderstreept voor demonstratiedoeleinden.
Er zijn veel partities op een apparaat waar je je als gebruiker nooit zorgen over hoeft te maken. Veel van deze partities worden nooit gewijzigd bij het flashen van aangepaste ROM's, kernels, herstelbewerkingen of wijzigingen zoals Magisk of Xposed. Veel van deze partities zullen voor onze doeleinden ongebruikt zijn of te gevaarlijk zijn om aan te raken, tenzij je weet wat je doet (XLOADER en OEMINFO op Huawei/Honor denk aan apparaten.) Voor de overgrote meerderheid van Android-gebruikers zijn de partities waar we het meest mee te maken hebben systeem-, opstart-, herstel-, gebruikersgegevens en, meer recentelijk, leveranciers- en vbmeta. Hier volgt een korte uitleg van het doel van elke partitie:
- systeem - bevat het Android-besturingssysteem, systeembibliotheken, systeem-apps en andere systeemmedia zoals opstartanimaties, stockachtergronden, beltonen, enz.
- boot - bevat de kernel, ramdisk en op A/B-apparaten ook het herstel
- herstel - bevat het herstel, waarbij TWRP meestal wordt geflasht op apparaten met alleen A (A/B-apparaten hebben geen speciale herstelpartitie)
- userdata - bevat al uw app-, systeem- en interne opslaggegevens
- leverancier - bevat platform- en apparaatspecifieke HAL's, de bestanden die nodig zijn om het Android-besturingssysteem te laten communiceren met de onderliggende hardware
- vbmeta - de partitie voor Android Verified Boot 2.0 die de integriteit van het opstartproces verifieert
OEM's van apparaten kunnen hun partitieschema's wijzigen om elke gewenste lay-out te gebruiken. Huawei splitst bijvoorbeeld de opstartpartitie op in ramdisk_recovery en kernel. Er zijn ook veel extra partities die mogelijk andere systeemapps bevatten, zoals cust, product en oem, en hoewel deze zijn veilig aan te passen, het wordt over het algemeen niet aanbevolen als u het uzelf gemakkelijker wilt maken om terug te keren naar de voorraad. Waar spelen A/B-partities een rol?
Het A/B-partitieschema
Hoe updates werken op apparaten met naadloze updates
De zeer eenvoudige afbeelding die ik hieronder heb gemaakt, illustreert hoe een update wordt afgehandeld op een apparaat met ondersteuning voor A/B-partities. De partitie die wordt geïllustreerd is de systeempartitie, hoewel andere partities zoals boot en leverancier ook kunnen worden bijgewerkt met een bepaalde OTA-update van een OEM. Dit updateproces vindt niet alleen plaats bij grote updates van de Android-versie, maar ook bij updates van beveiligingspatches.
- We beginnen met twee systeempartities, system_a en system_b, beide op dezelfde versie van Android.
- Ervan uitgaande dat system_a actief is, zal de OTA-update system_b, de inactieve partitie, op de achtergrond patchen.
- system_a is ingesteld op inactief en system_b wordt vervolgens actief zodra de gebruiker opnieuw opstart.
- De nu inactieve partitie, system_a, zal worden bijgewerkt wanneer de volgende OTA-update wordt uitgerold.
Wat zijn de voordelen van dit updateproces?
- Als een update mislukt, keert het apparaat terug naar de werkende build op het andere slot.
- Uw gegevens blijven perfect intact, zelfs als de update wordt afgebroken, omdat er slechts één partitie (userdata) is die uw gegevens bevat.
- Updatestreaming: als uw gegevenspartitie vol is, kan de update worden gedownload en gestreamd naar het inactieve slot. Het is een behoorlijk handige functie en betekent dat u geen tijdelijke opslagruimte hoeft te verspillen aan uw updates. Daarom is er geen cachepartitie op A/B-apparaten, omdat deze niet langer nodig is.
Welke impact heeft het A/B-partitioneringsschema op de opslag van een apparaat?
Betekent het feit dat naadloze updates resulteren in een heleboel dubbele partities dat je een hoop opslagruimte verliest? Helemaal niet. Google zegt dat apparaten met naadloze update-ondersteuning slechts een paar honderd Megabytes offline zouden moeten zijn dankzij het verwijderen van de /cache- en /recovery-partities. Als u beide verwijdert, worden de kosten van het toevoegen van een tweede set partities gecompenseerd. Volgens Google is de A/B-systeemimage van de Pixel half zo groot als de A-only systeemimage. Het grootste deel van het extra opslaggebruik komt feitelijk voort uit de toevoeging van een tweede leverancierspartitie. Dat is logisch omdat de leverancierspartitie alle bedrijfseigen binaire bestanden bevat die door OEM's worden gebruikt (onderdeel van Project Treble), dus er wordt verwacht dat dit behoorlijk wat ruimte in beslag zal nemen. Hoewel Google A/B-partitionering niet aanbeveelt op apparaten met 4 GB opslagruimte (aangezien dit bijna 10% van de totale beschikbare opslagruimte is), raden ze dit wel aan op apparaten met 8 GB en meer.
Hier volgt een overzicht van de opslagruimte die wordt gebruikt op een Google Pixel met en zonder A/B-partities.
Partitiegroottes |
A/B |
Alleen A |
---|---|---|
Bootloader |
50 MB*2 |
50 MB |
Laars |
32MB*2 |
32 MB |
Herstel |
32 MB |
|
Cache |
100 MB |
|
Radio |
70 MB*2 |
70 MB |
Leverancier |
300 MB*2 |
300 MB |
Systeem |
2048 MB*2 |
4096 MB |
Totaal |
5000 MB |
4680 MB |
Wat is er met de herstelpartitie gebeurd?
De onderliggende Linux-kernel op Android-apparaten zorgt ervoor dat Android de hardware op een smartphone kan herkennen en correct kan gebruiken. Op Android-apparaten met alleen A heb je over het algemeen twee versies van de kernel: de ene bevindt zich in de herstelpartitie en de andere bevindt zich in de opstartpartitie. Op A/B-apparaten die naadloze updates ondersteunen, bevindt het herstel zich nu samen met de kernel in de opstartimage. De belangrijkste functie van het herstel was het installeren van updates, maar aangezien dat door het systeem zelf wordt afgehandeld (update_engine) terwijl Android is opgestart, is de speciale herstelpartitie niet langer nodig.
Om een aangepast herstel op A/B-apparaten te installeren, moeten we dus de opstartpartitie aanpassen en het voorraadherstel vervangen door onze eigen partitie. Dit is de reden waarom je bij het installeren van TWRP een fastboot-opdracht moet gebruiken om eerst een aangepaste opstartimage op te starten Dan flash het TWRP-installatiescript, omdat fastboot partities niet kan patchen, maar er alleen volledig overheen kan flashen. Je zou technisch gezien je bestaande opstartimage vooraf kunnen patchen met TWRP en deze vervolgens via fastboot kunnen flashen, maar dat is meer moeite dan het waard is. Het TWRP-installatiescript patcht zowel de boot_a- als boot_b-partities om TWRP te installeren.
Leuk weetje: de Android update_engine die naadloze updates afhandelt, wordt in principe rechtstreeks uit Chrome OS geript. Alleen recentelijk werden strings met "Chrome OS" verwijderd uit het log van update_engine om verwarring te voorkomen voor iedereen die toevallig logcat controleert.
Ondersteunt mijn Android-smartphone A/B-partities voor naadloze updates?
Terwijl we houd een lijst bij van alle apparaten die het ondersteunen, je kunt het ook gemakkelijk zelf controleren.
Hoe beïnvloeden naadloze updates de ontwikkeling op maat?
Gebruikersperceptie van A/B-partities
Naadloze updates worden door veel gebruikers gezien als een belemmering voor de ontwikkeling van aangepaste software, maar zijn in werkelijkheid een zegen voor ontwikkelaars. De reden dat wordt aangenomen dat A/B-apparaten slechte ontwikkelingsondersteuning hebben, komt neer op de prijs van de eerste A/B-apparaten. De Google Pixel-toestellen waren immers een van de eersten die naadloze updates ondersteunden en vergeleken met de Nexus-smartphones van weleer waren ze relatief duur. Bovendien heeft Google, dankzij de talloze verbeteringen die Google heeft aangebracht aan het Android-besturingssysteem, aangepaste ROM's en Door aanpassingen die minder populair zijn op Google-apparaten, zijn de Google Pixel-smartphones lang niet zo goed van de grond gekomen op onze forums als de Nexus smartphones. Een combinatie van externe factoren leidde tot een afname van de aangepaste ontwikkeling op de Google Pixel-smartphones, hoewel de meeste gebruikers ervoor kozen om in plaats daarvan A/B-partitieondersteuning de schuld te geven. Vergelijk de beschikbaarheid van maatwerkontwikkeling op apparaten als de Google Pixel met apparaten als de Xiaomi Mi A1 op onze forums.
Bovendien leidde een gebrek aan inzicht in hoe A/B-partities de manier veranderden waarop gebruikers aangepaste ROM's, kernels, herstelbewerkingen en aanpassingen moesten installeren, ertoe dat ondersteuning voor A/B-partities niet populair was. Nu het herstel zich in de opstartimage bevindt, kunnen flash-wijzigingen in de verkeerde volgorde, zoals Magisk of Xposed, conflicten veroorzaken en tot een bootloop leiden. In welke volgorde je deze mods flasht, kan belangrijk zijn, maar in het geval van aangepaste ROM's hoef je je geen zorgen te maken over naar welk slot je flasht. In tegenstelling tot wat vaak wordt gedacht, flasht het installatiescript voor de meeste aangepaste ROM's niet naar beide slots. U hoeft zich daar meestal geen zorgen over te maken, omdat u niet handmatig van slot hoeft te wisselen.
Hoe ontwikkelaars A/B-partities bekijken
Bij het bouwen van een ROM kunnen ontwikkelaars beide partities gebruiken om afzonderlijke builds te testen. Als iemand niet werkt, kunnen ze gewoon terugkeren naar de werkende partitie en hun ROM opnieuw opbouwen. Ontwikkelaars kunnen ook testen op regressies door simpelweg een update te installeren, de actieve partitie te wisselen en de twee te vergelijken zonder gegevens te hoeven wissen. Hier ziet u hoe het LineageOS-team de ondersteuning voor A/B-partities bekijkt:
"Velen in de Android-gemeenschap hebben A/B afgedaan als 'moeilijk te ondersteunen' en 'niet ontwikkelaarsvriendelijk', terwijl het in feite, als het op de juiste manier wordt geïmplementeerd, dat wel is. gemakkelijker te ondersteunen en net zo ontwikkelaarsvriendelijk." - jrizzoli, LineageOS-wijzigingslogboek 19
De aanvankelijke problemen met A/B-ondersteuning voor ontwikkelaars kwamen voort uit het aanpassen van hun bestaande tools om deze apparaten te ondersteunen. De ontwikkelaar van Magisk, topjohnwu, voegde een jaar later officiële ondersteuning toe voor de Google Pixel vrijgegeven – niet omdat het moeilijk was, maar eerder omdat het hem een jaar kostte om het apparaat daadwerkelijk te verkrijgen werken aan. TWRP-ondersteuning kwam vrij snel op A/B-apparaten nadat de hoofdontwikkelaar, Dees_Troy, er een poging toe had gedaan. LineageOS 15.1 ondersteunt nu A/B-apparaten nadat vrijwilligers tijd hadden gevonden om hun addon.d-script te repareren.
Hoe u een A/B-apparaat kunt updaten dat een aangepast herstel-, kernel- of andere modificatie heeft
Aangepaste ROM's
Het flashen van updates op een apparaat met een aangepast ROM betekent dat je op je hoede moet zijn voor welk slot je ook flasht, toch? Niet helemaal. TWRP zal daar veel van voor je afhandelen, en het is standaard ingesteld op het inactieve slot voor het flashen van een aangepast ROM. Als je actieve slot A is en je een aangepast ROM flasht, flash je feitelijk naar slot B. Wanneer u opnieuw opstart, is het actieve slot nu B. Ontwikkelaars kunnen het installatiescript aanpassen en naar beide slots flashen om het de eindgebruiker gemakkelijker te maken, hoewel de meeste aangepaste ROM-installatiescripts momenteel slechts naar één slot flashen. Ten slotte kunnen aangepaste ROM's een A/B-updater in hun ROM implementeren, zodat gebruikers er niet eens mee hoeven te rommelen handmatig knipperen van updates: de nieuwste LineageOS 15.1 bevat een Lineage Updater-tool en XDA Senior Member VS-RedDragon maakte een generieke A/B-updater die andere ontwikkelaars kunnen gebruiken.
Stock-ROM's
Maar is het geen probleem als uw apparaat het stock-ROM met verschillende aanpassingen gebruikt en u een update wilt installeren zonder al deze mods te verliezen? Dit kan gebeuren als u niet de juiste stappen kent om een update te installeren. Op de OnePlus 6 kunt u bijvoorbeeld geen incrementele OTA op uw gewijzigde apparaat flashen, omdat de incrementele OTA zal proberen uw gewijzigde opstartimage te patchen. Je zult dus waarschijnlijk eindigen met een bootloop, en daarom moet je de volledige ROM-update flashen om je gewijzigde opstartimage volledig te overschrijven. Hier zijn de algemene stappen die u moet nemen om een OxygenOS-update op uw OnePlus 6 te installeren terwijl u nog steeds TWRP, Magisk en optioneel een aangepaste kernel behoudt.
- Heb de laatste gedownload volledige ROM ritssluiting
- Flash de volledige ROM-zip tijdens herstel
- (Optioneel) Aangepaste Flash-kernel
- Flash TWRP-installatieprogramma
- Start direct opnieuw op naar herstel
- Flits Magisk
Op de Google Pixel-apparaten kan dat flash de fabrieksimage zonder gegevens te wissen, start dan TWRP op, installeer TWRP via het installatiescript en installeer vervolgens Magisk.
Een update uitpakken om individuele partitie-images te flashen
Updatebestanden voor veel A/B-apparaten zijn iets anders dan die voor alleen-A-apparaten. Ze zijn niet langer alleen maar een zip-bestand met veel afbeeldingen (exclusief de fabrieksafbeeldingen van Google en Razer), maar ze hebben de vorm van een payload.bin-bestand. Je kunt dit bestand uitpakken en elk onderdeel handmatig flashen, maar hiervoor heb je een speciale tool nodig. Als je wilt leren hoe je dit kunt doen op de OnePlus 6, Xiaomi Mi A1 en vele andere A/B-apparaten, lees dan verder.
Instellen om payload.bin te extraheren
- Zorg ervoor dat je Python 3.6 hebt geïnstalleerd.
- Download payload_dumper.py en update_metadata_pb2.py hier.
- Pak uw OTA-zip uit en plaats payload.bin in dezelfde map als deze bestanden.
- Open PowerShell, Opdrachtprompt of Terminal, afhankelijk van uw besturingssysteem.
- Voer de volgende opdracht in:
python -m pip install protobuf
- Als dat klaar is, voer je deze opdracht in:
python payload_dumper.py payload.bin
- Hierdoor worden de afbeeldingen in het payload.bin-bestand uitgepakt naar de huidige map waarin u zich bevindt.
Je kunt elk van deze afbeeldingen nu afzonderlijk flashen via fastboot als je dat wilt. In het volgende gedeelte ziet u hoe u dat doet.
Fastboot gebruiken om afbeeldingen te flashen op een apparaat dat naadloze updates ondersteunt
Er zijn een aantal opdrachten die exclusief zijn voor apparaten met A/B-partitiesystemen. U kunt uw actieve slot wijzigen en naar specifieke slots flitsen. Als u een Project Treble-compatibel apparaat en wil leren hoe flash algemene systeemafbeeldingen, zou u bekend moeten zijn met deze opdrachten. Kijk eens naar de onderstaande tabel.
Fastboot-opdrachten |
Commando |
---|---|
Krijg huidige actieve slot |
fastboot getvar all | grep "current-slot"Als u een Windows-pc gebruikt, werkt de opdracht "grep" niet. |
Stel een ander slot in als actief |
fastboot set_active andere |
Stel het opgegeven slot in als actief |
fastboot set_active $ORfastboot --set-active=_$slotwaar $ a of b is |
Flash-image naar de opgegeven partitie in het huidige slot |
fastboot flashpartitie partitie.img |
Flash-image naar de opgegeven partitie in het opgegeven slot |
fastboot flashpartitie_a partitie.imgfastboot flashpartitie_b partitie.img |
(Opmerking: op A/B-apparaten kunt u een partitie in een bepaald slot specificeren waarnaar u wilt flashen, of u kunt het slotachtervoegsel weglaten en het flasht naar het huidige actieve slot. U kunt bijvoorbeeld "partition" in de flash-opdracht vervangen door "system", "system_a" of "system_b.")
Een woord over Project Treble en naadloze updates
Een veel voorkomende misvatting is dat de ondersteuning van Project Treble en de ondersteuning van A/B-partities aan elkaar gerelateerd zijn, maar dat is in werkelijkheid niet het geval. Het hebben van het één impliceert niet het ander. De Motorola Moto Z2 Force gebruikt een A/B-partitioneringsschema, maar ondersteunt geen Treble. Aan de andere kant ondersteunt de Honor 9 Lite Project Treble, maar is hij toch een A-only apparaat.
Veelgestelde vragen/samenvatting
-
Wat zijn de voordelen van A/B-partitionering?
- Met A/B-partitionering kunt u uw Android-smartphone bijwerken terwijl u deze gebruikt, door simpelweg opnieuw op te starten wanneer u klaar bent om op te starten in de nieuwe versie. Het fungeert ook als bescherming tegen stenen. Als de update fout gaat, keert u terug naar de werkende installatie.
-
Belemmert het hebben van A/B-partitionering de ontwikkeling?
- Hoewel het ontwikkelaars wat tijd kostte om zich aan te passen, is het antwoord vrijwel nee. In feite kan het ontwikkelaars helpen, omdat ze hun aangepaste ROM kunnen dual-booten met de oude versie en een nieuwe testversie om te controleren op regressies.
-
Welke invloed hebben A/B-partities op mods zoals aangepaste kernels, Magisk of Xposed?
- Je moet voorzichtig zijn bij het installeren ervan, maar er zijn momenteel geen problemen. Magisk ondersteunt officieel apparaten met naadloze updates, en zolang je de dingen in de juiste volgorde flasht, zou je geen problemen moeten hebben. Zorg ervoor dat je de aangepaste kernel flasht voordat je je andere mods flasht, en je zou klaar moeten zijn om te gaan.
-
Kan ik twee verschillende ROM's flashen op elke partitie en dual-boot?
- In theorie wel. Er ontstaan echter problemen vanwege de gedeelde gegevenspartitie, dus dit wordt niet aanbevolen.
-
Betekent het hebben van een A/B-partitieschema dat ik minder opslagruimte heb?
- Nee! Google zegt dat apparaten die naadloze updates ondersteunen slechts een paar honderd megabytes aan opslagruimte opofferen om dit te ondersteunen. De voordelen wegen zwaarder dan de kosten.
-
Mijn apparaat ondersteunt A/B-partities. Betekent dit dat ik gebruik kan maken van een Project Treble Generic System Image?
- Niet noodzakelijk. Project Treble en A/B-ondersteuning hebben niets met elkaar te maken. De Motorola Moto Z2 Force ondersteunt Project Treble niet, maar ondersteunt wel het A/B-partitieschema.
-
Mijn apparaat ondersteunt Project Treble. Betekent dit dat ik een A/B-partitieschema heb?
- Dit is niet altijd het geval. De Honor 9 Lite is een goed voorbeeld omdat deze Project Treble ondersteunt maar geen A/B-partitieschema heeft.
-
Waarom moet ik TWRP eerst opstarten met fastboot en dan flashen?
- Dit komt door de manier waarop fastboot werkt en het feit dat de herstelpartitie niet langer bestaat. Herstel wordt binnen de opstartpartitie geplaatst, dus we moeten zowel boot_a als boot_b aanpassen. Je kunt een partitie in fastboot niet patchen, maar er alleen overheen flashen. Je zou in theorie een vooraf gepatcht opstartimage kunnen maken en dat in plaats daarvan kunnen flashen.
-
Zijn er gevaren verbonden aan A/B-partities? Welke invloed heeft de terugdraaibeveiliging op zaken?
- Google heeft zijn best gedaan om dit geen probleem te maken, maar in het geval van de Motorola Moto Z2 Force, er waren gevallen bekend waarbij een toestel het oudere slot reactiveerde na een upgrade naar Android Oreo. Dit betekende dat de terugdraaibeveiliging in werking trad en dat apparaateigenaren hun smartphone alleen konden redden met EDL-herstel. Google zegt echter dat de terugdraaibeveiliging pas in werking treedt na de eerste keer opstarten, dus het slot moet na een update volledig functioneren voordat je niet langer kunt downgraden.