Ist Android ein 32-Bit- oder 64-Bit-Betriebssystem?


46

Der Titel ist so ziemlich selbsterklärend: Ist Android ein 32- oder 64-Bit-Betriebssystem? Ich gehe davon aus, dass es sich um die eine oder andere und nicht um beides handelt, da dadurch sowohl 32- als auch 64-Bit-Binärdateien auf Google Play gehostet werden müssten. Ich weiß, dass dies eine einfache Frage ist und dass andere sie gestellt haben, aber für mein ganzes Leben konnte ich im Internet keine Antwort finden, und es gibt mit Sicherheit keine in dieser SE.

Antworten:


48

Im Bereich der ARM-Chipsätze, die der gemeinsame Faktor ist, wird der gesamte Android-Stack, vom nahezu identischen Kernel auf Linux-Basis, in der Tat 32-Bit, aus üblicherweise entweder einer 32-Bit / 64-Bit-Host-Umgebung, der Host-Umgebung, querkompiliert ist normalerweise eine der Distributionen von Linux. Die von Google empfohlene Distribution zum Erstellen und Cross-Compilieren von Android ist Ubuntu .

Die Android-Laufzeitbibliothek (Medien, Grafik, Dateisystem, um nur einige zu nennen) hat ebenfalls 32 Bit, aber wenn wir die Ebene des Dalvikvm erreichen, wird die Anzahl der Bits irrelevant, da an diesem Punkt die Apks kommen aus dem Google Play Store sind native Bytecodes (ein "Nebenprodukt" des generierten Java-Codes, der zu einem portablen Bytecode kompiliert wird), die auf die DalvikVM (Virtual Machine) abzielen, die wiederum den Bytecode interpretiert und übersetzt, der den unformatierten ARM-Befehlssatz zum Ziel hat.

Froyo war das letzte Android-Gerät, das die Kompilierung unter einer 32-Bit-Hostumgebung ermöglichte, in der es auf den ARM-Chipsatz ausgerichtet war.

Gingerbread war vor etwa drei Jahren das erste "zukünftige" Android, das die Verwendung einer gehosteten 64-Bit-Umgebung vorschrieb, in der es gebaut wurde. Es gab viele Hacks, um Gingerbread in einer 32-Bit-Umgebung zu entwickeln.

ICS und JB und höher erfordern definitiv eine 64-Bit-Umgebung, um die Kompilierung zu beschleunigen und die Bearbeitungszeit beim Erstellen zu verkürzen.

Zusammenfassend hat das, was Sie im Play Store sehen, keinen Einfluss darauf, ob 32-Bit oder 64-Bit verwendet werden und ist daher irrelevant.

Randnotiz: Typische 16 GB RAM / Quad Core / 64 Bit Linux-Distribution, die Zeit, die zum Erstellen von ICS von Grund auf benötigt wird, beträgt maximal 30 Minuten. Wäre dies eine 32-Bit Linux-Distribution, hätte dies länger gedauert. Tatsächlich könnte dies zu einem Zusammenbruch der CPU führen Da es einfach nicht genug Rechenleistung gibt, um cross-kompilierten Code zu erzeugen und herauszuholen, ist dies ein sehr anspruchsvoller und anstrengender Prozess!

Beweis dafür.

Ziehen Sie eine native ARM-Binärdatei ein, die in /system/binoder /system/xbinbeispielsweise in /system/bin/dalvikvmder Dalvik-VM-Binärdatei enthalten ist, die für die oberen Schichten von Java und APKs verantwortlich ist.

Untersuchen Sie nun die Binärdatei, indem Sie den folgenden Befehl eingeben: file dalvikvmDie erwartete Ausgabe lautet wie folgt:

dalvikvm: ELF 32-Bit-LSB-Programm, ARM, Version 1 (SYSV), dynamisch verknüpft (verwendet gemeinsam genutzte Bibliotheken), entfernt

Beachten Sie den Verweis auf 32-Bit-ELF und ist mit ARM querkompiliert und eine ausführbare Binärdatei.

Schauen wir uns nun eine native gemeinsam genutzte Bibliothek an /system/lib, die zum Beispiel /system/lib/libandroid_runtime.soin now issue zu finden file libandroid_runtime.soist. Die erwartete Ausgabe wäre:

libandroid_runtime.so: Freigegebenes ELF-32-Bit-LSB-Objekt, ARM, Version 1 (SYSV), dynamisch verknüpft, entfernt

Beachten Sie auch hier, dass die 32-Bit-ELF mit ARM querkompiliert und eine gemeinsam genutzte Bibliothek ist.

Der Schlüssel zur Cross-Kompilierung des Hosts ist in der AOSP-Quelle zu finden, dh Gingerbread-Builds mussten ursprünglich auf einem 64-Bit-Hostsystem erstellt werden. Hier ist der Link zur Newsgroup, der beschreibt , wie die Skripte gepatcht werden müssen , damit sie darauf aufbauen können 32-Bit-Host mit zwei Patches, die hier für build/core.mkund build/main.mk( kombiniert ) in AOSPs Gerrit-Review gefunden wurden.

In der Folge hatte dieser Patch seinen Weg zu den Build-Skripten von ICS gefunden, in denen ich das Privileg hatte, ICS auf einer 32-Bit-Plattform zu kompilieren, deren Erstellung 3 Tage dauerte ( es war eine Portierung von ICS für das Zte Blade ). Jetzt sind die Anforderungen hochgefahren, Sie benötigen definitiv einen 64-Bit-Host, um die Cross-Kompilierung von AOSP-Builds ab ICS zu ermöglichen :)


2
Interessantes Zeug, aber es wäre schön, einige Quellen in der Antwort zu haben.
Erdnuss

2
+1, denn selbst wenn es keine Quellen gibt, wurde mindestens die Hälfte der Forschungsarbeit geleistet, um herauszufinden, wonach zu suchen ist. - Mach keinen
Fehler, wenn

1
Es gibt jetzt 64-Bit-ARM-Geräte mit 64-Bit-Android.
Matthew Read

1
Ich bin downvoting, weil die meiste Antwort darauf ist, welche Umgebungen zum Kompilieren von Android verwendet werden, was für die Frage völlig irrelevant ist.
Dan Hulme

1
Ja, das stimmt, und ich werde heute eine neue Antwort zu der Situation veröffentlichen, aber die Kompilierungsumgebung war schon immer ein roter Hering.
Dan Hulme

8

Ursprünglich war Android nur für 32-Bit-Prozessoren geschrieben worden, insbesondere für 32-Bit-ARM-Prozessoren. Später haben Intel und MIPS viel in die Unterstützung ihrer Architekturen für Android investiert: aber immer noch nur für 32-Bit-Prozessoren. Sie konnten dies ohne (viele) Kompatibilitätsprobleme tun, da die meisten Apps nicht als Binärdateien ausgeliefert werden. Sie sind in Java geschrieben und werden stattdessen als Bytecode ausgeliefert , den eine virtuelle Maschine auf dem Telefon mit der Architektur des Telefons kompiliert, wenn die App ausgeführt wird. Einige Apps enthalten nativeKomponenten, die als Binärdatei ausgeliefert werden. Dies geschieht, um einige Arten von Apps zu beschleunigen (insbesondere Spiele) oder um der App den Zugriff auf C-Bibliotheken zu ermöglichen, die in Java nicht verfügbar sind. Diese Apps können mehr als eine Binärdatei für die nativen Codeteile enthalten, damit sie auf verschiedenen Architekturen ausgeführt werden können. Trotzdem sind die meisten Apps nur für Java gedacht, sodass sie auf jeder Architektur funktionieren.

Das Obige war alles wahr, als diese Frage (und die meisten anderen Antworten) geschrieben wurden, aber nicht mehr. Lollipop hat die Unterstützung für die neuen 64-Bit-ARM-Prozessoren ( ARMv8) sowie für die x86_64-Prozessoren von Intel und AMD, was bedeutet, dass Android jetzt sowohl 32-Bit- als auch 64-Bit-Prozessoren unterstützt. Das Nexus 9 war das erste Flaggschiff unter den 64-Bit-Android-Geräten. Die 64-Bit-Unterstützung ermöglicht nicht nur den Zugriff auf neue Befehlssatzerweiterungen, sondern bedeutet auch, dass Apps mehr als 4 GB RAM verwenden können. Die meisten Apps werden nicht so viel brauchen, aber High-End-Spiele und Software zur Foto- / Videoerstellung können dies durchaus nutzen: Android soll zu einer Plattform für Spiele in Konsolenqualität (einschließlich VR-Spiele) und zum Erstellen von Inhalten werden. Java-Apps müssen nicht aktualisiert werden, um dies zu nutzen, da die virtuelle Maschine sie immer auf die Telefonarchitektur kompiliert, Apps mit nativem Code jedoch.

Da ARMv8 mit 32-Bit-Code abwärtskompatibel ist (auf dieselbe Weise, wie x86_64 weiterhin x86-Code ausführen kann), können auch Apps, die systemeigenen Code für 32-Bit-Prozessoren enthalten, weiterhin auf 64-Bit-Android ausgeführt werden. Daher muss eine App nur für 64-Bit kompiliert werden, wenn sie systemeigenen Code enthält und die höhere RAM-Grenze oder die neuen Funktionen der Architektur nutzen möchte.


5

Alle ARM-Chips sind derzeit 32-Bit. Aus diesem Grunde , Android zur Zeit führt die gesamten Code in einer 32-Bit - Umgebung.

Der Start von 64-Bit-Prozessoren ist für 2014 geplant .


1
Das ist keine verlässliche Quelle, da es sich um Server handelte, um zu zitieren: "Smartphone ist ein bisschen weiter weg", sagte Forsyth. , wir sprechen von ARM im Kontext von Android / Smartphones / Tablets.
t0mm13b

2

Ist Android ein 32- oder 64-Bit-Betriebssystem? Ich gehe davon aus, dass es sich um die eine oder andere und nicht um beides handelt, da dadurch sowohl 32- als auch 64-Bit-Binärdateien auf Google Play gehostet werden müssten.

Weder eigentlich. Android ist ein Dalvik VM-basiertes Betriebssystem und Google Play hostet Dalvik-Anwendungen. Dalvik VM selbst hat wie Java VM immer eine 32-Bit-Version, unabhängig von der Bit-Größe der physischen Maschine.

Wie Sie vermutet haben, müssen Anwendungen, die mit systemeigenen Binärdateien und NDK-Anwendungen geliefert werden, Binärdateien enthalten, die für alle Architekturen kompiliert wurden, auf denen sie ausgeführt werden sollen. Die häufigste Architektur, auf der Android ausgeführt wird, ist ARM 32-Bit. Es gibt jedoch auch Geräte, die auf x86 und MIPS ausgeführt werden.


0

Ich rate nur, aber ich denke, das erklärt es auch einfach. Es hängt davon ab, welches Gerät Sie verwenden. Es gibt vier Arten von Betriebssystemen: ARM, ARM 64, X84 und X84_64. Das ARM ist die beliebte 32-Bit-Plattform, ARM 64 ist auch die beliebte, aber 64-Bit-Plattform, X84 ist die ungewöhnliche Plattform und wird auf Zenfones verwendet, genauso wie X84_64, das ungewöhnlich ist und auf Android-Emulatoren verwendet wird. Ich habe diese OS-Informationen zu Open Gapps erhalten

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.