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/bin
oder /system/xbin
beispielsweise in /system/bin/dalvikvm
der 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 dalvikvm
Die 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.so
in now issue zu finden file libandroid_runtime.so
ist. 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.mk
und 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 :)