Android CPU-architectuur (ABI) begrijpen: waarom arm64-v8a, armeabi-v7a en x86 ertoe doen

Diagram showing one app bundle splitting into arm64-v8a, armeabi-v7a, and x86 architecture-specific APKs

Als je ooit een reeks gesplitste APK-bestanden hebt samengevoegd en hebt gezien hoe je telefoon 'App niet geïnstalleerd' teruggooide, of erger nog, zag hoe de app prima werd geïnstalleerd en vervolgens crashte zodra je op het pictogram tikte, is de kans groot dat het echte probleem niets te maken had met een beschadigde download. Het ging vrijwel zeker over architectuur: een discrepantie tussen de CPU waarop je telefoon draait en de CPU waarvoor de native code van de app is gecompileerd. De meeste Android-gebruikers hoeven hier nooit over na te denken, tot het moment dat er stilletjes iets kapot gaat, en dan wordt het snel relevant. Dit is wat CPU-architectuur betekent voor een APK, waarom een ​​enkele app in de Play Store in het geheim wordt geleverd als verschillende builds van zichzelf, en hoe je de compatibiliteit kunt controleren voordat je iets installeert.

Wat een ABI is

ABI staat voor Application Binary Interface. In praktische termen is dit de instructieset die een chip begrijpt: het ruwe machinecodeformaat dat een processor rechtstreeks kan uitvoeren. Het grootste deel van een Android-app, de onderdelen geschreven in Java of Kotlin, worden gecompileerd in bytecode die binnen de Android Runtime (ART) draait, en het maakt ART niet zoveel uit op welke chip de app staat. Die laag is qua ontwerp architectuur-agnostisch, wat een groot deel uitmaakt van de reden waarom Android-apps over het algemeen 'gewoon werken' op zo'n breed scala aan hardware.

Native code is een ander verhaal. Tal van apps, vooral games, camera-apps, tools voor machinaal leren en alles wat met zware audio- of videoverwerking te maken heeft, verzenden native bibliotheken geschreven in C of C++ via de Android NDK. Deze bibliotheken worden van tevoren gecompileerd tot machinecode voor één specifieke instructieset, en een chip die voor één instructieset is gebouwd, kan over het algemeen geen machinecode uitvoeren die voor een andere instructieset is geschreven. Dat is de hele reden waarom ABI's bestaan ​​als iets dat de moeite waard is om te begrijpen: op het moment dat een app zelfs maar één native .so-bibliotheek bevat, raakt de compatibiliteit ervan gebonden aan de architecturen waarvoor de bibliotheek is gebouwd.

De architecturen die u tegenkomt

Vroeger was er meer variatie op dit gebied (denk aan de gewone armeabi, of MIPS?), maar tegen 2026 is het veld teruggebracht tot vier ABI's die de moeite waard zijn om te weten:

ABIBitbreedteTypische apparatenOpmerkingen
arm64-v8a64-bits ARMVrijwel elke telefoon die sinds ongeveer 2019 is verkochtHet standaarddoel voor nieuwe apps; Google vereist al enkele jaren 64-bit-ondersteuning voor nieuwe Play Store-inzendingen.
armeabi-v7a32-bits ARMOudere of budgettoestellen, sommige goedkope telefoons worden nog steeds verkocht in opkomende marktenWordt nog steeds door veel apps geleverd voor achterwaartse compatibiliteit, ook al hebben de meeste actieve apparaten dit niet langer nodig.
x8632-bit IntelOude Intel-gebaseerde tablets, oudere emulatorsMeestal verouderd; je zult tegenwoordig zelden een echte 32-bit x86-telefoon tegenkomen.
x86_6464-bit IntelSommige Chromebooks, desktop-Android-emulators, een paar x86-tabletsBelangrijk als u apps test in een emulator zoals een x86-gebaseerde Android Studio AVD of bepaalde BlueStacks-builds.

Als je een telefoon vasthoudt die je in de afgelopen vijf of zes jaar hebt gekocht, is het vrijwel zeker arm64-v8a. De uitzonderingen die het waard zijn om te onthouden zijn emulators en Chromebooks, die in plaats daarvan vaak op x86_64 draaien, omdat dat overeenkomt met de onderliggende laptop- of desktop-CPU.

Waarom apps überhaupt de moeite nemen om meerdere builds te verzenden

Een voor de hand liggende vraag is waarom ontwikkelaars niet zomaar de native bibliotheken van elke architectuur in één enkele APK proppen en er klaar mee zijn. Sommige apps doen precies dat, en het wordt een universele of "dikke" APK genoemd. Het nadeel is de grootte. Een game met native bibliotheken voor arm64-v8a, armeabi-v7a, x86 en x86_64, allemaal gebundeld, kan gemakkelijk in omvang verdubbelen of verdrievoudigen vergeleken met een build die precies die ene architectuur bevat die je apparaat nodig heeft. Vermenigvuldig dat over miljoenen installaties en je ziet een werkelijk aanzienlijke hoeveelheid verspilde bandbreedte en opslagruimte, voor code die nooit op dat apparaat zal draaien.

Om die verspilling te voorkomen, splitsen Google Play en het Android App Bundle-formaat een app op in een kleine basis-APK plus een reeks configuratie-APK's, waarvan er één gewijd is aan architectuur. Wanneer uw telefoon de app aanvraagt, levert Play Store de basis-APK samen met alleen de architectuursplitsing die overeenkomt met uw chip, samen met bijpassende schermdichtheid en taalsplitsingen. Je krijgt uiteindelijk een installatie die zich gedraagt ​​als een enkele app, maar achter de schermen is samengesteld uit verschillende speciaal gebouwde onderdelen.

Hoe gesplitste APK's en app-bundels dit gebruiken

Als je ooit een .apks- of .xapk-pakket hebt geopend en bestandsnamen als split_config.arm64_v8a.apk, split_config.armeabi_v7a.apk, split_config.xxhdpi.apk en split_config.en.apk naast een base.apk hebt opgemerkt, is dat precies dit systeem in actie, gewoon geëxporteerd als een reeks bestanden in plaats van stil te worden afgeleverd door de Play Store. Dichtheids- en taalsplitsingen zijn meestal veilig om zonder onderscheid te installeren, omdat een telefoon eenvoudigweg bronnen negeert die hij niet nodig heeft. De architectuursplitsing is anders: installeer de verkeerde, of installeer de verkeerde niet, en je zult echte problemen tegenkomen.

Wanneer u een converter gebruikt om een ​​gesplitst pakket weer samen te voegen tot één installeerbare APK, moet het samenvoegproces kiezen welke architectuursplitsingen moeten worden samengevoegd. Een goede converter behoudt elke architectuursplitsing die echt nuttig is, of laat u kiezen, in plaats van er stilzwijgend maar één te behouden en te hopen dat deze overeenkomt met uw apparaat.

Wat er gebeurt als de architectuur niet bij elkaar past

Er zijn twee verschillende faalmodi die de moeite waard zijn om van elkaar te onderscheiden, omdat ze er anders uitzien en aanvoelen dan bij een gewone gebruiker.

De eerste is een regelrechte installatiefout. Als een app bijna volledig rond native code is gebouwd zonder enige vorm van terugval, zal de pakketbeheerder van Android weigeren deze helemaal te installeren, waarbij meestal een fout als INSTALL_FAILED_NO_MATCHING_ABIS aan het licht komt. Je zult de app nooit eens kunnen openen; de installateur houdt u bij de deur tegen.

De tweede, meer frustrerende uitkomst is een stil gedeeltelijk succes. Als een app een Java- of Kotlin-toegangspunt heeft dat op zichzelf prima laadt, maar vervolgens een native bibliotheek probeert aan te roepen die eenvoudigweg niet aanwezig is voor uw architectuur, wordt de installatie normaal voltooid. Alles ziet er goed uit totdat je op het pictogram tikt, waarna de app vrijwel onmiddellijk crasht, vaak met een UnsatisfiedLinkError begraven in de logboeken. Dit is het klassieke verhaal van "Ik heb het geconverteerd, het is geïnstalleerd en het wordt meteen afgesloten", en het is bijna altijd een architectuurprobleem in plaats van een beschadigd bestand.

Diagram comparing a matching arm64 APK that installs and runs successfully against an x86-only APK that fails to install on an arm64 phone with error INSTALL_FAILED_NO_MATCHING_ABIS

Hoe u de architectuur van uw eigen telefoon kunt controleren

Voor de overgrote meerderheid van de mensen is dit eenvoudig: als je telefoon uit 2019 of later is, ga dan uit van arm64-v8a en ga verder. Als je het zeker wilt weten, of je hebt te maken met een ouder of ongebruikelijk toestel, een paar praktische opties:

Hoe u kunt controleren welke architecturen een APK ondersteunt

Voordat u een bestand van buiten de Play Store installeert, is het de moeite waard om te bevestigen wat erin zit, in plaats van te raden. De eigen bibliotheken van een APK bevinden zich in mappen die zijn vernoemd naar hun architectuur in de map lib/, zoals lib/arm64-v8a/ of lib/armeabi-v7a/. Elke tool die de interne structuur van een APK kan inspecteren, kan u precies vertellen welke van deze mappen aanwezig zijn, waardoor u precies weet op welke apparaten het bestand zal worden uitgevoerd.

Controleer voordat u installeert

Onze APK-infotool leest de interne lib/-map van een APK en vermeldt elke architectuur waarvoor deze is gebouwd, zodat u de compatibiliteit kunt bevestigen voordat u iets sideloadt. Wanneer u een gesplitst pakket converteert met onze XAPK naar APK-converter, brengen we dit na elke conversie ook automatisch naar voren, waarbij we de architecturen in het samengevoegde bestand opsommen en dit markeren wanneer een build een segment lijkt te missen dat gewone apparaten nodig zouden hebben.

Universele APK versus Single-ABI APK: welke moet u gebruiken?

MetriekUniversele / dikke APKSingle-ABI APK
BestandsgrootteGroter, soms 2-4xKlein, bevat alleen wat uw apparaat nodig heeft
VerenigbaarheidWerkt op vrijwel elk apparaatWerkt alleen op een bijpassende architectuur
Beste voorEén bestand delen dat overal zou moeten werken, onzekere ontvangersUw eigen apparaat, terwijl u de architectuur ervan al kent
RisicoZeer laag risico op ABI-mismatchZal mislukken of crashen als je de verkeerde kiest

Veelvoorkomende fouten die mensen maken bij gesplitste pakketten

Belangrijkste afhaalrestaurants

  • Een ABI is de instructieset die een chip begrijpt; het is alleen van belang voor apps die native (C/C++) code bevatten.
  • arm64-v8a dekt bijna elke moderne telefoon; armeabi-v7a is voor oudere apparaten; x86/x86_64 verschijnt meestal in emulators en Chromebooks.
  • Apps worden doorgaans per architectuur opgesplitst om te voorkomen dat onnodige native code naar elk apparaat wordt verzonden.
  • Een niet-overeenkomende architectuur blokkeert de installatie volledig of veroorzaakt een onmiddellijke crash na een schijnbaar succesvolle installatie.
  • U kunt zowel de architectuur van uw apparaat als de ondersteunde architecturen van een APK controleren voordat u iets installeert, waardoor giswerk volledig wordt vermeden.

Veelgestelde Vragen (FAQ)

Moet ik de architectuur van mijn telefoon kennen om een ​​normale Play Store-app te kunnen installeren?

Nee. De Play Store detecteert uw apparaat automatisch en levert alleen de overeenkomende architectuursplitsing, dus dit wordt alleen relevant als u APK's van buiten de Play Store sideloadt.

Kan één APK meerdere architecturen tegelijk ondersteunen?

Ja. Een universele of dikke APK bundelt native bibliotheken voor elke ondersteunde architectuur in één bestand. Het is groter, maar kan op elk compatibel apparaat worden geïnstalleerd, ongeacht de chip.

Waarom werd mijn geconverteerde APK geïnstalleerd, maar crashte daarna onmiddellijk?

Dit gebeurt meestal wanneer de app een kleine hoeveelheid Java-code heeft die prima kan worden geïnstalleerd, maar vervolgens probeert een eigen bibliotheek te laden die niet is opgenomen in de architectuur van uw apparaat, waardoor tijdens runtime een UnsatisfiedLinkError wordt gegenereerd.

Is arm64-v8a achterwaarts compatibel met armeabi-v7a-apps?

Over het algemeen wel. De meeste arm64-v8a-chips kunnen ook 32-bits ARM-instructies uitvoeren, dus een APK die alleen voor armeabi-v7a is, werkt meestal nog steeds op een moderne arm64-telefoon, maar niet andersom.

Zijn x86 Android-apparaten er nog in 2026?

Ze zijn tegenwoordig zeldzaam op telefoons, maar x86 of x86_64 vind je nog steeds op sommige oudere Intel-gebaseerde tablets, een handvol Chromebooks met Android-apps en de meeste desktop-Android-emulators.

Je hoeft dit allemaal niet te onthouden. De korte versie: moderne telefoons zijn bijna altijd arm64-v8a, apps worden gesplitst door architectuur om ruimte te besparen, en als iets weigert te installeren of direct na het openen crasht, is architectuurmismatch een van de eerste dingen die de moeite waard zijn om uit te sluiten voordat je ervan uitgaat dat het bestand zelf kapot is.

Ontwikkeld en gedocumenteerd door Mst Shaefale Hoofdontwikkelaar en Android-pakketarchitect • Geverifieerd op Android 12–15

Mst Shaefale onderhoudt de XAPK/APKS-fusie aan de clientzijde, de parser voor binaire manifesten en de APK v1+v2-ondertekentools op xapktoapk.com. Ontdekt u een verouderde opdracht of een wijziging in het besturingssysteem? Stuur een redactionele opmerking.