El título se explica por sí mismo: ¿es Android un sistema operativo de 32 o 64 bits? Supongo que es uno u otro y no ambos, ya que eso obligaría a los binarios de 32 y 64 bits a alojarse en Google Play. Sé que esta es una pregunta simple, y que otras personas la han estado haciendo, pero por mi vida no he podido encontrar una respuesta en la web, y ciertamente no hay ninguna en este SE.
Respuesta
En el ámbito de los conjuntos de chips ARM, que es el factor común, toda la pila de Android, desde el núcleo casi idéntico basado en Linux, de hecho, son de 32 bits, compilados de forma cruzada desde un entorno host de 32 bits / 64 bits, el entorno host suele ser una de las distribuciones de Linux. La distribución recomendada por Google para compilar y compilar Android es Ubuntu .
La biblioteca de tiempo de ejecución de Android (medios, gráficos, sistema de archivos, por nombrar solo algunos) son también de 32 bits, pero a medida que llegamos a la capa de dalvikvm, el número de bits se vuelve irrelevante, ya que en este punto, los apks que provienen de Google Play Store son bytecode nativo (un «subproducto» del código Java generado compilado en un código de bytes portátil) que apunta a DalvikVM (Máquina virtual) que a su vez interpreta y traduce el código de bytes que apunta al conjunto de instrucciones ARM sin procesar.
Froyo fue el último Android que permitió la compilación en un entorno alojado de 32 bits en el que fue compilado de forma cruzada apuntando al conjunto de chips ARM.
Gingerbread fue el primero de Android «futuro», en ese entonces, hace tres años, que introdujo el requisito de usar un entorno alojado de 64 bits en el que fue construido . Hubo muchos trucos para que Gingerbread se construyera en un entorno alojado de 32 bits.
ICS y JB, y versiones posteriores, ahora definitivamente requieren un entorno de 64 bits para acelerar la compilación y reducir el tiempo de respuesta en la construcción.
Entonces, para resumir, lo que ves en Play Store no influye en si se utilizan 32 bits o 64 bits y, por lo tanto, son irrelevantes.
Nota al margen: RAM típica de 16 GB / Distribución de Linux de cuatro núcleos / 64 bits, el tiempo que lleva construir ICS desde cero, toma 30 minutos como máximo, si se tratara de una distribución de Linux de 32 bits, habría tomado más tiempo, de hecho, puede causar un colapso de la CPU ya que simplemente no hay suficiente capacidad de procesamiento para generar y generar código compilado cruzado, que es un proceso muy exigente y agotador.
Prueba de esto.
Extraiga cualquier binario ARM nativo que se encuentre en /system/bin
o /system/xbin
, por ejemplo, /system/bin/dalvikvm
, este es el binario Dalvik VM que es responsable de las capas superiores de Java y APK.
Ahora, examine el binario emitiendo este comando: file dalvikvm
que da un resumen del tipo de archivo que es, el resultado esperado sería este:
dalvikvm: ejecutable LSB ELF de 32 bits, ARM, versión 1 (SYSV), vinculado dinámicamente (utiliza bibliotecas compartidas), eliminado
Fíjese en la referencia a ELF de 32 bits, y se compila en forma cruzada con ARM y es un ejecutable binario.
Correcto, sigamos, inspeccionemos una biblioteca compartida nativa que se encuentra en /system/lib
, por ejemplo, /system/lib/libandroid_runtime.so
, ahora emite file libandroid_runtime.so
, el resultado esperado sería el siguiente:
libandroid_runtime.so: Objeto compartido LSB ELF de 32 bits, ARM, versión 1 (SYSV), vinculado dinámicamente, despojado
Una vez más, observe que su ELF de 32 bits, compilado de forma cruzada en ARM y es una biblioteca compartida.
La clave para La compilación cruzada del host se puede encontrar en la fuente AOSP, es decir, la compilación de Gingerbread originalmente tenía el requisito de estar construida en un sistema host de 64 bits, aquí está el grupo de noticias linky refiriéndose a cómo parchear los scripts para que se compile en el host de 32 bits que tiene dos parches, que se encuentran aquí, para build/core.mk
y build/main.mk
( combinados ) en la revisión de Gerrit de AOSP.
Como siguiente Como resultado, este parche se abrió camino a los scripts de compilación de ICS en los que tuve el privilegio de compilar ICS en una plataforma de 32 bits que tardó 3 días en compilarse ( era un puerto de ICS para Zte Blade ). Ahora, los requisitos han aumentado, no definitivamente necesita un host de 64 bits para permitir la compilación cruzada de compilar AOSP desde ICS hacia arriba: )
Comentarios
- Entonces, ¿quiere decir que compilar y ejecutar un en un sistema operativo Android de 32 bits es más lento que en 64 bits? ¿Es un requisito general ser de 64 bits para el sistema operativo Android moderno como Kitkat o L ?
- Ahora hay dispositivos ARM de 64 bits ejecutando Android de 64 bits.
- Yo ‘ miro hacia abajo porque la mayor parte de la respuesta es sobre qué entornos se utilizan para compilar Android, lo cual es completamente irrelevante para pregunta.
- @DanHulme Esta respuesta fue publicada hace casi 4 años … sí, el panorama ha cambiado mucho desde entonces. 🙂
- Sí, eso ‘ es cierto, y ‘ voy a publicar una nueva respuesta sobre situación actual, pero el entorno de compilación siempre ha sido una pista falsa.
Respuesta
Originalmente, Android fue escrito solo para procesadores de 32 bits: y específicamente, procesadores ARM de 32 bits. Más tarde, Intel y MIPS invirtieron mucho en hacer que Android también fuera compatible con sus arquitecturas, pero solo procesadores de 32 bits. Pudieron hacer esto sin (muchos) problemas de compatibilidad, porque la mayoría de las aplicaciones no se envían como binarios. Escritas en Java, en su lugar se envían como bytecode , que es una máquina virtual en el teléfono se compila en la arquitectura del teléfono cuando se ejecuta la aplicación. Algunas aplicaciones incluyen componentes nativos , que se envían como binarios. Esto se hace para hacer que algunos tipos de aplicaciones sean más rápidas (en particular, los juegos), o para permitir que la aplicación acceda a bibliotecas C que no están disponibles en Java. Esas aplicaciones pueden incluir más de un binario para las partes del código nativo, para permitirles ejecutar en diferentes arquitecturas. Aun así, la mayoría de las aplicaciones son solo de Java, por lo que funcionan en cualquier arquitectura.
Todo lo anterior era cierto en el momento en que esta pregunta (y la mayoría de las otras respuestas) escrito, pero ya no. Lollipop introdujo soporte para los nuevos procesadores ARM de 64 bits ( ARMv8 ), así como para los procesadores x86_64 de Intel y AMD, lo que significa que Android ahora es compatible con 32 bits y Procesadores de 64 bits. El Nexus 9 fue el primer dispositivo Android insignia de 64 bits. Además de dar acceso a nuevas extensiones de conjuntos de instrucciones, la compatibilidad con 64 bits significa que las aplicaciones pueden usar más de 4 GB de RAM. La mayoría de las aplicaciones no necesitarán tanto, pero los juegos de alta gama y el software de creación de fotos / videos ciertamente pueden hacer uso de él: empujando a Android para que sea una plataforma para juegos con calidad de consola (incluidos los juegos de realidad virtual) y para crear contenido. Aplicaciones Java no es necesario actualizar para aprovechar esto, porque la máquina virtual siempre las compila en la arquitectura del teléfono, pero las aplicaciones con código nativo lo harán.
Porque ARMv8 es compatible con versiones anteriores de 32- código de bits (de la misma manera que x86_64 aún puede ejecutar código x86), incluso las aplicaciones que incluyen código nativo para procesadores de 32 bits pueden ejecutarse en Android de 64 bits. Por lo tanto, una aplicación solo debe compilarse para 64 bits si contiene código y quiere aprovechar el límite de RAM más alto o las nuevas características de la arquitectura.
Respuesta
Todos los chips ARM son actualmente de 32 bits. Debido a esto, Android actualmente ejecuta todo el código en un entorno de 32 bits.
Procesadores de 64 bits programados para su lanzamiento en 2014 .
Comentarios
- Que ‘ no es exactamente una fuente confiable ya que se trata de servidores, para citar “ El teléfono inteligente está un poco más lejos ”, dijo Forsyth. , ‘ estamos hablando de ARM en el contexto de Android / Smartphones / Tablets.
Respuesta
¿Es Android un sistema operativo de 32 o 64 bits? Supongo que es uno u otro y no ambos, ya que eso obligaría a los binarios de 32 y 64 bits a alojarse en Google Play.
En realidad, tampoco. Android es un sistema operativo basado en VM de Dalvik y Google Play aloja aplicaciones de Dalvik. La propia Dalvik VM, como Java VM, es siempre de 32 bits independientemente del bitness de la máquina física.
Como sospechaba, las aplicaciones que se distribuyen con binarios nativos y aplicaciones NDK deben distribuirse con binarios compilados para cada arquitectura. está destinado a ejecutarse. La arquitectura más común en la que se ejecuta Android es ARM de 32 bits; sin embargo, también hay dispositivos que funcionan con x86 y MIPS.
Respuesta
Estoy adivinando, pero creo que esto también lo explica simplemente sencillo. Depende del dispositivo que esté utilizando, hay cuatro tipos de sistema operativo que son ARM, ARM 64, X84 y X84_64. ARM es la plataforma popular de 32 bits, ARM 64 también es la plataforma popular pero de 64 bits, X84 es la plataforma poco común y se usa en Zenfones, al igual que X84_64 es poco común y se usa en emuladores de Android. Obtuve esta información del sistema operativo sobre Open Gapps