De titel spreekt voor zich: is Android een 32- of 64-bits besturingssysteem? Ik neem aan dat het het een of het ander is en niet beide, omdat dat ertoe zou leiden dat zowel 32- als 64-bits binaire bestanden op Google Play worden gehost. Ik weet dat dit een simpele vraag is, en dat andere mensen het hebben gesteld, maar voor het leven van mij heb ik geen antwoord op internet kunnen vinden, en er is er zeker geen op deze SE.

Antwoord

In het rijk van de ARM-chipsets is dat de gemeenschappelijke factor, de hele Android-stack, van de bijna identieke kernel gebaseerd op Linux is in feite 32-bits, cross-gecompileerd vanuit meestal een 32-bits / 64-bits hostomgeving, de hostomgeving is meestal een van de distributies van Linux. Aanbevolen distributie, door Google, voor het bouwen en cross-compileren van Android is Ubuntu .

De Android runtime-bibliotheek (media, afbeeldingen, bestandssysteem, om er maar een paar te noemen) zijn ook 32bit, maar als we de laag van de dalvikvm bereiken, wordt het aantal bits irrelevant omdat het op dit punt is, de apks die uit de Google Play Store komen, zijn native bytecode (een bijproduct van gegenereerde Java-code gecompileerd in een draagbare bytecode) die zich richt op de DalvikVM (virtuele machine) die op zijn beurt de bytecode interpreteert en vertaalt die gericht is op de onbewerkte ARM-instructieset.

Froyo was de laatste Android die compilatie mogelijk maakte onder een 32-bits gehoste omgeving waarin het was cross-gecompileerd gericht op de ARM-chipset.

Gingerbread was de eerste van toekomstige Android, ongeveer drie jaar geleden, die een vereiste introduceerde om een 64-bits gehoste omgeving te gebruiken waarin het was gebouwd . Er waren veel hacks om Gingerbread te laten bouwen in een 32-bits gehoste omgeving.

ICS en JB, en hoger vereist nu absoluut een 64-bits omgeving om de compilatie te versnellen en de doorlooptijd bij het bouwen te verminderen.

Kortom, wat u in de Play Store ziet, heeft geen invloed op het gebruik van 32-bits of 64-bits en is dus niet relevant.

Kanttekening: typisch 16 GB RAM / Quad core / 64-bits Linux-distributie, de tijd die nodig is om ICS helemaal opnieuw op te bouwen, duurt maximaal 30 minuten.Als dit een 32-bits Linux-distributie was geweest, zou het langer hebben geduurd, in feite kan het een CPU-meltdown veroorzaken, omdat er simpelweg niet genoeg is verwerkingskracht om cross-gecompileerde code te churnen en uit te voeren, die een zeer veeleisend en belastend proces is!

Bewijs hiervan.

Haal elk native ARM-binair bestand binnen dat is gevonden in /system/bin of /system/xbin , bijvoorbeeld /system/bin/dalvikvm, dit is het Dalvik VM-binaire bestand dat verantwoordelijk is voor de bovenste lagen van Java en APKs.

Onderzoek nu het binaire bestand door dit commando: file dalvikvm wat een samenvatting geeft van het type bestand dat het is, de verwachte output zou dit zijn:

dalvikvm: ELF 32-bit LSB executable, ARM, versie 1 (SYSV), dynamisch gelinkt (gebruikt gedeelde libs), gestript

Let op de verwijzing naar 32-bit ELF, en is kruisgecompileerd naar ARM en is een binair uitvoerbaar bestand.

Oké, verder, laten we eens kijken een native gedeelde bibliotheek gevonden in /system/lib, bijvoorbeeld /system/lib/libandroid_runtime.so, geeft nu file libandroid_runtime.so uit, de verwachte output zou dit zijn:

libandroid_runtime.so: ELF 32-bit LSB gedeeld object, ARM, versie 1 (SYSV), dynamisch gekoppeld, gestript

Nogmaals, let op, de 32-bits ELF is gecompileerd naar ARM en is een gedeelde bibliotheek.

De sleutel tot de cross-compilatie van de host kan worden gevonden in de AOSP-broncode, dat wil zeggen dat Gingerbread-build oorspronkelijk moest worden gebouwd op een 64-bits hostsysteem, hier is de nieuwsgroep linky verwijzend naar hoe de scripts te patchen om het te laten bouwen op een 32-bits host die twee patches heeft, hier te vinden, voor build/core.mk en build/main.mk ( gecombineerd ) in de Gerrit-recensie van AOSP.

Als een volgende resultaat, deze patch had zijn weg gevonden naar de build-scripts van ICS waarin ik het voorrecht had om ICS te compileren op een 32-bits platform dat 3 dagen nodig had om te bouwen ( het was een poort van ICS voor de Zte Blade ). Nu zijn de vereisten opgevoerd, u heeft beslist een 64-bits host nodig om cross-compilatie mogelijk te maken van het bouwen van AOSP vanaf ICS naar boven: )

Opmerkingen

  • Dus je bedoelt dat het compileren en draaien van een op 32-bit Android OS langzamer duurt dan in 64-bit? Is het een algemene vereiste om alle 64-bits te zijn voor moderne Android-besturingssystemen zoals Kitkat of L ?
  • Er zijn nu 64-bits ARM-apparaten met 64-bits Android.
  • Ik ‘ ben downvoting omdat het meeste antwoord gaat over welke omgevingen worden gebruikt om Android te compileren , wat volkomen irrelevant is voor de vraag.
  • @DanHulme Dit antwoord werd bijna 4 jaar geleden gepost … ja, het landschap is sindsdien enorm veranderd. 🙂
  • Ja, dat ‘ is waar, en ik ‘ ga een nieuw antwoord plaatsen over de huidige situatie, maar de compilatieomgeving is altijd een rode haring geweest.

Antwoord

Oorspronkelijk was Android geschreven alleen voor 32-bits processors: en in het bijzonder 32-bits ARM-processors. Later hebben Intel en MIPS veel geïnvesteerd om Android ook hun architecturen te laten ondersteunen: maar nog steeds slechts 32-bits processors. Ze konden dit doen zonder (veel) compatibiliteitsproblemen, omdat de meeste apps niet als binaries worden verzonden. Geschreven in Java, worden ze in plaats daarvan verzonden als bytecode , wat een virtuele machine aan de telefoon compileert naar de architectuur van de telefoon wanneer de app wordt uitgevoerd. Sommige apps bevatten native -componenten, die als binair bestand worden verzonden. Dit wordt gedaan om bepaalde soorten apps sneller te maken (met name games), of om de app toegang te geven tot C-bibliotheken die niet beschikbaar zijn in Java. Die apps kunnen meer dan één binair bestand bevatten voor de native codedelen, zodat ze kunnen worden uitgevoerd op verschillende architecturen. Toch zijn de meeste apps alleen voor Java, dus ze werken gewoon op elke architectuur.

Het bovenstaande was allemaal waar op het moment dat deze vraag (en de meeste andere antwoorden) geschreven, maar niet langer. Lollipop introduceerde ondersteuning voor de nieuwe 64-bits ARM-processors ( ARMv8 ) en voor Intel en AMDs x86_64-processors, wat betekent dat Android nu zowel 32-bits als 64-bits processoren. De Nexus 9 was het eerste vlaggenschip 64-bits Android-apparaat. Naast toegang tot nieuwe instructieset-extensies, betekent 64-bits ondersteuning dat apps meer dan 4 GB RAM kunnen gebruiken. De meeste apps hebben niet zoveel nodig, maar high-end games en software voor het maken van fotos / videos kunnen er zeker gebruik van maken: Android stimuleren om een platform te worden voor games van consolekwaliteit (inclusief VR-games) en voor het maken van inhoud. Java-apps hoeven niet te worden bijgewerkt om hiervan te profiteren, omdat de virtuele machine ze altijd compileert naar de architectuur van de telefoon, maar apps met native code wel.

Omdat ARMv8 achterwaarts compatibel is met 32- bit-code (op dezelfde manier waarop x86_64 nog steeds x86-code kan uitvoeren), zelfs apps die native code voor 32-bits processors bevatten, kunnen nog steeds op 64-bits Android worden uitgevoerd. Een app hoeft dus alleen voor 64-bits te worden gecompileerd als deze native bevat code en wil het profiteren van de hogere RAM-limiet of de nieuwe functies van de architectuur.

Answer

Alle ARM-chips zijn momenteel 32-bits. Hierdoor voert Android momenteel alle code in een 32-bits omgeving.

64-bits processors ingesteld voor lancering in 2014 .

Opmerkingen

  • Dat ‘ niet bepaald een betrouwbare bron is, aangezien dit over servers ging, om te citeren ” Smartphone is een beetje verder weg “, zei Forsyth. , we ‘ hebben het over ARM in de context van Android / Smartphones / Tablets.

Antwoord

Is Android een 32- of 64-bits besturingssysteem? Ik neem aan dat het het een of het ander is en niet beide, omdat hierdoor zowel 32- als 64-bits binaire bestanden worden gehost op Google Play.

Eigenlijk ook niet. Android is een op Dalvik VM gebaseerd besturingssysteem en Google Play host Dalvik-applicaties. Dalvik VM zelf is, net als Java VM, altijd 32-bits, ongeacht de bitness van de fysieke machine.

Zoals je vermoedde, moeten applicaties die worden geleverd met native binaries en NDK-applicaties worden geleverd met binaries die voor elke architecturen zijn gecompileerd. het is bedoeld om te draaien op. De meest voorkomende architectuur waarop Android draait, is ARM 32-bit; er zijn echter ook apparaten die op x86 en MIPS draaien.

Answer

Ik gok maar, maar ik denk dat dit het ook gewoon verklaart gemakkelijk. Het hangt af van het apparaat dat u gebruikt, er zijn vier soorten besturingssystemen, namelijk ARM, ARM 64, X84 en X84_64. De ARM is het populaire 32-bits platform, ARM 64 is ook het populaire, maar 64-bits platform, X84 is het ongebruikelijke platform en wordt gebruikt op Zenfones, hetzelfde als X84_64, het is ongebruikelijk en wordt gebruikt op Android-emulators. Ik heb deze os-informatie over Open Gapps

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *