Hoi Android developer hier!
Ik zie best veel reacties met informatie die soms net niet helemaal klopt, dus ik dacht ik deel even mijn kennis, dan wel mijn mening.
@
The Zep Man Dat klopt niet helemaal. Verreweg de meeste applicaties zijn geschreven om op een interpreter ("virtual machine") te draaien. Zonder native component draaien die prima op een x86-CPU end op iedere andere architectuur waarvoor de interpreter beschikbaar is.
Dit is heel discutabel, en ik durf het tegenovergestelde te claimen. Het klopt dat de meeste applicaties op Android geschreven worden met eigenlijk alleen interpreteerbare code, echter trekken de meeste apps tegenwoordig extreem veel dependencies binnen, waaronder officiële Google SDKs, die intern vaak naast interpreteerbare code ook native code shippen. Denk bijvoorbeeld aan de androidX `media3` packages, `datastore`, `sqlite-bundled`, bepaalde Compose graphics dependencies, deze worden allemaal veelvuldig gebruikt. Daarnaast zijn er veel third-party dependencies die intern gebruik maken van native code, denk bijvoorbeeld aan cryptografie, of OpenCV en dat soort zaken.
TLDR: Veel Android apps leunen en shippen gewoon op native binaries, dan wel bewust, dan wel onbewust.
@
kiang De meeste developers leveren dus alsnog platform-specifieke code aan de playstore. De vraag is of de bovenstaande app developers de apps paltform-agostisch hebben ontwikkeld en simpelweg native builds hebben aangeleverd en daarbij ook x86 versies hebben getest en gebouwd. Persoonlijk denk ik wel dat de meeste agnostisch ontwikkelen, en ook x86 builds uitleveren, maar of die getest zijn durf ik oprecht te betwijfelen omdat x86 bij android zo een niche is.
Dit klopt dus, de meeste apps hebben ook platformspecifieke native code (zoals eerder al uitgelegd). Of developers er ook echt actief mee bezig zijn om agnostisch te ontwikkelen? Dat is denk ik wat meer een 50/50 split, veel Android ontwikkelaars, en met name de minder ervaren ontwikkelaars snappen soms zelf niet eens de in- en outs van native code in Android apps. Maar de tooling van Google (meestal via de Android Gradle Plugin), lost eigenlijk de meeste problemen voor je op, standaard worden native binaries die mee komen via dependencies gewoon voor alle beschikbare architecturen in een App Bundle gestopt die naar de Play Store gaat. Je moet dat gedrag moedwillig uitschakelen als je bijvoorbeeld x86 code wil uitsluiten. De nuances beginnen wellicht wanneer je zelf native code gaat schrijven (en gebruik gaat maken van de NDK), maar er zijn maar weinig apps waar dat heel normaal is.
@
GertMenkel Tegenwoordig is Android bijna alleen maar aarch64 (niet eens ARMv7 meer) en zijn apps daar ook op gebouwd.
Klopt de meeste telefoons zijn aarch64, maar de meest populaire dependencies (zeker die van Google zelf), bevatten gewoon native binaries voor verschillende architecturen waaronder x86, dus je zou eigenlijk geen problemen verwachten. Apps zijn dus niet per se gebouwd om alleen aarch64 te ondersteunen.
Daarnaast, als je als Android ontwikkelaar op Windows ontwikkelt, ben je constant x86 aan het testen, want idealiter draait je emulator op x86 (iets met performance), op een M serie MacBook is dat natuurlijk een ander verhaal, dan draait je emulator weer op ARM en test je x86 dus niet automatisch al een beetje mee.
@
Luchtbakker Vind ik erg makkelijk over gedacht. Want ik moet nu als dev weer mijn apps gaan aanpassen terwijl Google het met een fatsoenlijke emulator ook prima had kunnen oplossen. Dit is gewoon laksheid van Google die het zoals altijd weer lekker in de schoenen van de ontwikkelaars duwt.
Dit is een statement waar ik het niet mee eens ben als Android ontwikkelaar. Google/Android vertelt ontwikkelaars al vanaf dag 1 dat het belangrijk is om na te denken over de native binaries en architecturen die je app ondersteunt, ook de tooling is al sinds jaar en dag hier helemaal omheen gebouwd. Gebruik je standaard Android SDK's en ontwikkel tooling, dan kost dit niet eens extra moeite. Dit is gewoonweg hoe Android al meer dan 18 jaar werkt: je app kan meerdere CPU architecturen ondersteunen, en dat is ook de verwachting. Er is helemaal geen emulatie nodig.
Maar, hier is een fun fact: zo'n emulatielaag bestaat dus al wel, in de vorm van `libnativebridge` en `libndk_translation`, en zit standaard in de meeste Chromebooks ingebouwd. Maar zo'n translatielaag is gewoon niet perfect, en heeft zo zijn nadelen en nuances.
(Waar ik in deze reactie over x86 spreek, maakt het voor het principe niet uit of dat nou 32 of 64-bit is, maar 64-bit is in de praktijk wel de norm)
[Reactie gewijzigd door rolf-smit op 6 oktober 2026 19:16]