Nel regno dei chipset ARM, che è il fattore comune, l'intero stack Android, dal kernel quasi identico basato su Linux, è in realtà 32 bit, cross-compilato di solito da un ambiente host a 32 bit / 64 bit, l'ambiente host di solito è una delle distribuzioni di Linux. La distribuzione consigliata, da parte di Google, per la creazione e la compilazione incrociata di Android è Ubuntu .
La libreria di runtime di Android (media, grafica, filesystem, per citarne solo alcuni) ha anche 32 bit, ma quando raggiungiamo il livello di dalvikvm, il numero di bit diventa irrilevante com'è a questo punto, gli apk arrivano dal Google Play Store sono bytecode nativi (un "sottoprodotto" del codice Java generato compilato in un bytecode portatile) che ha come target il DalvikVM (Virtual Machine) che a sua volta interpreta e traduce il bytecode indirizzato al set di istruzioni ARM non elaborato.
Froyo è stato l'ultimo Android a consentire la compilazione in un ambiente ospitato a 32 bit in cui è stato compilato in modo incrociato per il chipset ARM.
Gingerbread è stato il primo del "futuro" Android, all'epoca circa, tre anni fa, a introdurre un requisito per l'utilizzo di un ambiente ospitato a 64 bit in cui era stato costruito. Ci sono stati molti hack per far costruire Gingerbread in un ambiente ospitato a 32 bit.
ICS e JB, e verso l'alto, ora richiedono sicuramente un ambiente a 64 bit per accelerare la compilazione e ridurre i tempi di risposta nella costruzione.
Quindi, per riassumere, ciò che vedi sul Play Store non ha alcuna influenza sul fatto che vengano utilizzati 32 bit o 64 bit e quindi irrilevanti.
Nota a margine: tipica distribuzione Linux da 16 GB RAM / Quad core / 64 bit, il tempo necessario per creare l'ICS da zero, impiega massimo 30 minuti, se si trattasse di una distribuzione Linux a 32 bit, ci sarebbe voluto più tempo, infatti, potrebbe causare un crollo della CPU in quanto non esiste semplicemente una potenza di elaborazione sufficiente per sfornare e far girare codice compilato, che è un processo molto impegnativo e faticoso!
Prova di ciò.
Inserisci qualsiasi binario ARM nativo trovato in /system/bin
o /system/xbin
, ad esempio, /system/bin/dalvikvm
questo è il binario VM Dalvik che è responsabile dei livelli superiori di Java e APK.
Ora, esamina il binario emettendo questo comando: file dalvikvm
che fornisce un riepilogo del tipo di file che è, l'output previsto sarebbe questo:
dalvikvm: eseguibile ELB LSB a 32 bit, ARM, versione 1 (SYSV), collegato dinamicamente (usa librerie condivise), rimosso
Notare il riferimento a ELF a 32 bit, compilato in modo incrociato con ARM ed è un eseguibile binario.
Bene, andando avanti, ispezioniamo una libreria condivisa nativa trovata /system/lib
, ad esempio /system/lib/libandroid_runtime.so
, ora in file libandroid_runtime.so
uscita, l'output previsto sarebbe questo:
libandroid_runtime.so: oggetto ELF LSB a 32 bit condiviso, ARM, versione 1 (SYSV), collegato dinamicamente, rimosso
Ancora una volta, notate, il suo ELF a 32 bit, compilato in modo incrociato per ARM ed è una libreria condivisa.
La chiave per la cross-compilazione del padrone di casa può essere trovato nella sorgente AOSP, cioè, di pan di zenzero costruzione ha avuto origine l'obbligo di essere costruita su un sistema host a 64 bit, ecco il newsgroup linky riferendosi a come correggere gli script per farlo costruire su Host a 32 bit che ha due patch, trovate qui, per build/core.mk
e build/main.mk
( combinate ) sulla recensione Gerrit di AOSP.
Di conseguenza, questa patch si è fatta strada verso gli script di build di ICS in cui avevo il privilegio di compilare ICS su una piattaforma a 32 bit che impiegava 3 giorni per essere costruito ( era una porta di ICS per Zte Blade ). Ora, i requisiti sono dilagato, si fanno sicuramente bisogno di accoglienza a 64 bit per consentire cross-compilazione di costruzione AOSP da ICS verso l'alto :)