49 votos

¿Es Android un sistema operativo de 32 o 64 bits?

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 alojar binarios de 32 y 64 bits en Google Play. Sé que es una pregunta sencilla, y que otras personas se la han hecho, pero por mi vida no he sido capaz de encontrar una respuesta en la web, y desde luego no la hay en esta SE.

48voto

Nick Pierpoint Puntos 7976

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, son, de hecho, de 32 bits, compilados de forma cruzada desde, por lo general, un entorno de host de 32 bits/64 bits, el entorno de host suele ser una de las distribuciones de Linux. La distribución recomendada, por Google, para construir y compilar de forma cruzada Android es Ubuntu .

La biblioteca de tiempo de ejecución de Android (medios de comunicación, gráficos, sistema de archivos, por nombrar sólo algunos) también son de 32 bits, pero cuando llegamos a la capa de la dalvikvm, entonces el número de bits se vuelve irrelevante, ya que es en este punto, las apks que vienen de la Google Play Store son bytecode nativo (Un "subproducto" de código Java generado compilado en un bytecode portátil) que se dirige a la DalvikVM (Máquina Virtual) que a su vez interpreta y traduce el bytecode dirigido al conjunto de instrucciones ARM crudo.

Froyo fue el último Android que permitió la compilación bajo un entorno alojado de 32 bits en el que se compiló de forma cruzada apuntando al chipset ARM.

Gingerbread fue el primero de los "futuros" Android, por aquel entonces hace unos tres años, que introdujo el requisito de utilizar un entorno alojado de 64 bits en el que se construyó. Hubo muchos hacks para conseguir que Gingerbread se construyera en un entorno alojado de 32 bits.

ICS y JB, y hacia arriba ahora definitivamente requiere un entorno de 64 bits para acelerar la compilación y para reducir el tiempo de entrega en la construcción.

Así que para resumir, lo que se ve en la Play Store no tiene ninguna relación con el uso de 32bit o 64bit y por lo tanto es irrelevante.

Nota al margen: Típica distribución de Linux de 16GB de RAM/Quad core/64bit, el tiempo que se tarda en construir ICS desde cero, toma 30 minutos como máximo, si esta fuera una distribución de Linux de 32bit, habría tomado más tiempo, de hecho, puede causar un colapso de la CPU ya que simplemente, no hay suficiente poder de procesamiento para batir y arrancar el código compilado cruzado, que es ¡un proceso muy exigente y agotador!

Prueba de ello.

Introduzca cualquier binario nativo de ARM que se encuentre en /system/bin o /system/xbin por ejemplo, /system/bin/dalvikvm , se trata del binario Dalvik VM que es responsable de las capas superiores de Java y de los APK.

Ahora, examine el binario emitiendo este comando: file dalvikvm que da un resumen del tipo de archivo que es, la salida esperada sería esta:

dalvikvm: Ejecutable ELF de 32 bits LSB, ARM, versión 1 (SYSV), enlazado dinámicamente (utiliza librerías compartidas), despojado

Fíjate en la referencia a ELF de 32 bits, y se compila de forma cruzada a ARM y es un ejecutable binario.

Bien, continuando, vamos a inspeccionar 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 este:

libandroid_runtime.so: Objeto compartido ELF de 32 bits LSB, ARM, versión 1 (SYSV), enlazado dinámicamente, despojado

De nuevo, fíjate en que es ELF de 32 bits, compilado de forma cruzada para ARM y es una biblioteca compartida.

La clave de la compilación cruzada del host se puede encontrar en la fuente de AOSP, es decir, Gingerbread build originalmente tenía un requisito para ser construido en un sistema host de 64 bits, aquí está el grupo de noticias enlace refiriéndose a cómo parchear los scripts para que se construyan en host de 32 bits que tiene dos parches, que se encuentran aquí, para build/core.mk y build/main.mk ( combinado ) en la revisión de Gerrit de la AOSP.

Como resultado posterior, este parche había llegado 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 construirse ( era un port de ICS para el Zte Blade ). Ahora, los requisitos son mayores, usted hacer definitivamente necesita 64 bits de acogida para permitir la compilación cruzada de la construcción de AOSP de ICS hacia arriba :)

0 votos

Entonces, ¿quieres decir que compilar y ejecutar un an en el sistema operativo Android de 32 bits lleva más tiempo que en el de 64 bits? ¿Es un requisito general ser todo de 64 bits para los modernos sistemas operativos Android como Kitkat o L ?

1 votos

Ahora hay dispositivos ARM de 64 bits que ejecutan Android de 64 bits.

2 votos

Estoy votando a la baja porque la mayor parte de la respuesta se refiere a lo que los entornos están acostumbrados compilar Android, que es completamente irrelevante para la pregunta.

10voto

Andy Brudtkuhl Puntos 1714

Originalmente, Android estaba escrito sólo 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 todavía sólo con procesadores de 32 bits. Pudieron hacerlo sin (muchos) problemas de compatibilidad, porque la mayoría de las aplicaciones no se envían como binarios. Escritas en Java, se envían como bytecode que un máquina virtual en el teléfono compila a la arquitectura del teléfono cuando se ejecuta la aplicación. Algunas aplicaciones incluyen nativo que se envían como un binario. Esto se hace para que algunos tipos de aplicaciones sean más rápidos (especialmente los juegos), o para que la aplicación pueda acceder a bibliotecas C que no están disponibles en Java. Estas aplicaciones pueden incluir más de un binario para las partes de código nativo, para permitir que se ejecuten en diferentes arquitecturas. Aun así, la mayoría de las aplicaciones son sólo Java, por lo que funcionan en cualquier arquitectura.

Todo lo anterior era cierto en el momento en que se escribió esta pregunta (y la mayoría de las demás respuestas), pero ya no. Lollipop introdujo el 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 es ahora compatible con los procesadores de 32 y 64 bits. El Nexus 9 fue el primer dispositivo Android de 64 bits. Además de dar acceso a nuevas extensiones del conjunto de instrucciones, la compatibilidad con los 64 bits significa que las aplicaciones pueden utilizar más de 4 GB de RAM. La mayoría de las aplicaciones no necesitarán esa cantidad, pero los juegos de gama alta y el software de creación de fotos y vídeos sí que pueden aprovecharla: empujando a Android a ser una plataforma para juegos de calidad de consola (incluidos los juegos de realidad virtual) y para la creación de contenidos. Las aplicaciones Java no necesitan actualizarse para aprovechar esto, porque la máquina virtual siempre las compila según la arquitectura del teléfono, pero las aplicaciones con código nativo sí.

Dado que ARMv8 es compatible con el código de 32 bits (del mismo modo que x86_64 puede seguir ejecutando código x86), incluso las aplicaciones que incluyen código nativo para procesadores de 32 bits pueden seguir ejecutándose en Android de 64 bits. Por lo tanto, una aplicación sólo necesita ser compilada para 64 bits si contiene código nativo y quiere aprovechar el mayor límite de RAM o las nuevas características de la arquitectura.

5voto

free3dom Puntos 246

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 se lanzará en 2014 .

1 votos

Eso no es exactamente una fuente fiable, ya que esto estaba hablando de los servidores, para citar "El smartphone está un poco más lejos", dijo Forsyth. Estamos hablando de ARM en el contexto de Android/Smartphones/Tablets.

2voto

Lie Ryan Puntos 15629

¿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 alojar binarios de 32 y 64 bits en Google Play.

En realidad, ninguno de los dos. Android es un sistema operativo basado en Dalvik VM, y Google Play alberga aplicaciones Dalvik. La propia Dalvik VM, al igual que la Java VM, es siempre de 32 bits, independientemente de los bits de la máquina física.

Como sospechabas, las aplicaciones que se envían con binarios nativos y las aplicaciones del NDK deben enviarse con binarios compilados para cada una de las arquitecturas en las que se pretende ejecutar. La arquitectura más común en la que se ejecuta Android es ARM de 32 bits; sin embargo, también hay dispositivos que se ejecutan en x86 y MIPS.

0voto

NeonzYT Puntos 1

Sólo estoy adivinando, pero creo que esto también lo explica simplemente. Depende del dispositivo que estés usando, hay cuatro tipos de sistemas operativos que son ARM, ARM 64, X84 y X84_64. El ARM es la plataforma popular de 32 bits, ARM 64 es también la plataforma popular, pero de 64 bits, X84 es la plataforma poco común y se utiliza en Zenfones, al igual que X84_64 su poco común y se utiliza en emuladores de Android. Conseguí esta información del sistema operativo en Open Gapps

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X