7 votos

Aplicaciones de Android para la arquitectura "armeabi-v7a" y "x86": SoC vs. Procesador vs. ABI

Mientras descargaba aplicaciones de Android, a veces he visto aplicaciones para la arquitectura armeabi-v7a y x86.

Leí algunas referencias para la arquitectura armeabi-v7a y x86. Sin embargo, al final, no pude finalizar a qué procesadores móviles y arquitecturas pertenecen armeabi-v7a y cuáles pertenecen a x86.

Según mi conocimiento, los procesadores móviles comúnmente utilizados en dispositivos Android son Snapdragon (de Qualcomm), MediaTek, Exynos (de Samsung) y Kirin (de Huawei). Casi todas las marcas explican las especificaciones de un teléfono inteligente y casi todas las especificaciones dicen si el procesador móvil es de 64 bits o no. ¿Debo concluir que los procesadores móviles de 64 bits (Snapdragon, MediaTek, Exynos o Kirin) pertenecen a la arquitectura ARM?

EDICIÓN:
Para entender qué SoC es compatible con las aplicaciones Android armeabi-v7a y cuál SoC es compatible con las aplicaciones Android x86, he revisado las especificaciones de MediaTek Helio X30 y Snapdragon 855. La especificación de Helio X30 dice que es compatible con ARM Cortex-A73 de doble núcleo y ARM Cortex-A53 de cuatro núcleos, pero ARM no se menciona en ninguna parte de la especificación de Snapdragon 855. ¿Debería concluir que Helio X30 soportará aplicaciones de Android armeabi-v7a y que Snapdragon 855 no soportará aplicaciones de armeabi-v7a?

Por favor aclaren mis confusiones.

11voto

Jack Wade Puntos 231

Aquí están mis notas resumidas incompletas sobre el tema, pero suficientes para responder a su pregunta.

CONJUNTO DE INSTRUCCIONES:

Los procesadores están fabricados con matrices de semiconductores, generalmente de silicio monocristalino de grado electrónico. No saben inglés ni ningún otro idioma humano, sólo entienden 0 y 1 . Así que el diseñador del procesador nos dice en qué secuencia de ceros y unos podemos instruir a ese procesador específico. Este lenguaje numérico de instrucciones se estandariza como Machine Language y el conjunto de instrucciones de la máquina se llama Instruction Set . Un procesador sólo puede actuar sobre un único tipo de conjunto de instrucciones.
Los conjuntos de instrucciones pueden ser de 8/16/32/64 bits (definen cuántas instrucciones puede procesar un procesador a la vez), siendo las dos últimas las más comunes hoy en día.

LENGUAJES DE BAJO NIVEL:

Pero escribir el código de un programa (instrucciones) directamente en lenguaje de máquina (el archivo ejecutable) es casi imposible porque se tardan años en escribir y depurar un programa razonablemente grande (que hoy en día podemos escribir en unas horas). Por eso, para que los programadores se sientan cómodos, se desarrolló el lenguaje ensamblador, que sigue siendo un lenguaje específico del procesador, pero que es relativamente fácil de entender. El código escrito en lenguaje ensamblador se convierte en código máquina mediante Assembler - un programa escrito en lenguaje de máquina. Ambos se denominan lenguajes de bajo nivel.

LENGUAJES DE ALTO NIVEL:

Para reducir aún más el esfuerzo humano en la comunicación con el hardware, se desarrollaron lenguajes de alto nivel que no están vinculados a un conjunto de instrucciones específico (que denota una arquitectura concreta). Son idénticos a los lenguajes humanos, por lo que son fáciles de escribir, comprender, depurar y aplicar a múltiples arquitecturas. El código escrito en lenguaje de alto nivel se convierte en lenguaje de bajo nivel mediante Compiler - un programa escrito en lenguaje de bajo nivel. Uno de los lenguajes de alto nivel más utilizados es C. Pero a veces el código no se precompila a código máquina, sino que se ejecuta directamente (o se compila durante la ejecución) por Interpreter . Java es uno de esos "escribir una vez, ejecutar en cualquier lugar" (WORA) idiomas que se compila a byte-code y luego interpretado por Virtual Machine - de nuevo un programa compilado.

INTERFAZ BINARIA DE APLICACIÓN (ABI):

Dado que un programa (código) independiente de la arquitectura puede convertirse en un código dependiente de la arquitectura para cualquier procesador, el compilador tiene el deber de ocuparse de todos los requisitos de una arquitectura específica. Eso es lo que define la interfaz binaria de aplicación (ABI). En términos sencillos, una ABI representa una o varias arquitecturas específicas. Para obtener más detalles sobre las ABI integradas, es necesario conocer las fases de ensamblaje y compilación, el código objeto, el formato ejecutable y enlazable (ELF), la vinculación estática (archivo) y dinámica de las bibliotecas, etc.

Ahora vamos a tu pregunta:

¿QUÉ SON x86 Y ARM ?

x86 es una familia de conjuntos de instrucciones, desarrollada principalmente por Intel y AMD. ARM es otra familia, diseñada por una sola entidad ARM Holdings y se ha concedido la licencia a muchos fabricantes de soluciones integradas, como Qualcomm, Mediatek, Samsung y Huawei. Snapdragon, Exynos y Kirin son sus marcas. No son fabricantes de procesadores, pero tienen licencias para incluir procesadores ARM con sus propios circuitos System on Chip (SoC).

¿QUÉ ES EL SOC?

Un sistema en chip (SoC) es un pequeño circuito que incluye procesadores junto con otros componentes como GPU, RAM, Flash/eMMC (equivalente a HDD o SSD), módulo WiFi y bluetooth, conectividad USB, UART (puertos serie), JTAG (un protocolo de comunicación serie de muy bajo nivel), GPS, módems (para la conectividad celular) y posiblemente otros.

ARM ABIs:

Aunque la mayor parte de las aplicaciones de Android están escritas en Java, se puede programar en lenguajes nativos como C y C++, que necesitan ser compilados. Android proporciona su propio kit de desarrollo nativo ( NDK ) incluyendo (bibliotecas, archivos de cabecera y) un compilador que puede compilar código para múltiples ABIs incluyendo armeabi-v7a y x86 .
Por lo tanto, una aplicación Android (Java) no es específica de una arquitectura. El código de bytes de Java ( classes.dex archivo en el interior .apk ) es ejecutable en cualquier dispositivo Android en una instancia separada de Dalvik Virtual Machine ejecutado para cada aplicación por un proceso llamado Zygote . Pero si el archivo apk (zip) contiene además binarios/bibliotecas ELF, éstos son específicos de la arquitectura.

Aplicaciones/programas/binarios/ejecutables/bibliotecas nativas construidas con conjuntos de compiladores dirigidos a ARM Embedded ABI v7a ( armeabi-v7a ) puede ejecutarse en Application profile of 7th version of ARM processors ( Armv7-A ).

32 BITS VS. 64 BITS:

El procesador ARM puede ser de 32 o 64 bits. Depende de los fabricantes de SoC lo que quieran construir con su sistema embebido, por ejemplo, Snapdragon puede ser de 32 o 64 bits. Los procesadores ARM de 32 bits fueron mejorados en cuanto a rendimiento y se añadieron nuevas características desde la versión 2 hasta la versión 7. El soporte de 64 bits se introdujo en ARMv8.

Para saber si un dispositivo es de 32 o 64 bits, hay que comprobar las especificaciones de su SoC y luego de su procesador. Por ejemplo, si un SoC contiene Cotrex-53 procesador como Qualcomm Snapdragon 625 (MSM 8953) Es evidente que el especificaciones técnicas de Cortex-53 que es un procesador ARMv8 de 64 bits que tiene plena compatibilidad con ARMv7 de 32 bits, por lo que puede ejecutar binarios/bibliotecas compilados tanto para ABI armeabi-v7a y arm64-v8a pero no para armeabi o x86 .

3 votos

Nota al margen: para el soporte de ARM de 32 bits y ARM de 64 bits, Google exige el soporte de ARM de 32 bits en ARM de 64 bits como parte del Documento de Definición de Compatibilidad de Android desde Android 6.0 Curiosamente, el CDD para Android 9.0 menciona armeabi solo para soporte retrocompatible.

0 votos

Desde Android 9, el soporte de ARM de 32 bits en dispositivos de 64 bits ha sido opcional. Hasta ahora lo han proporcionado, pero eso cambiará a medida que los nuevos núcleos dejen de admitir Aarch32.

3voto

pr0nin Puntos 353

El número de dispositivos de hardware que utilizan x86 nunca fue muy alto. Hace algunos años, Intel tenía algunos procesadores x86 (Intel Atom) que se utilizaban en algunas tabletas Android (por ejemplo, Samsung Galaxy Tab 10.3).

Sin embargo, esas tabletas nunca alcanzaron un alto volumen en el mercado. Y no estoy seguro si todavía hay algún Smartphone o tableta x86 en el mercado que aún utilice una CPU x86.

Sin embargo, hay un caso de uso muy común en el que te encuentras con un "dispositivo Android x86": Emuladores de Android como el que se encuentra en el SDK de Android u otros emuladores como Genymotion, BlueStacks, ...

Dado que la PC que ejecuta el emulador típicamente utiliza una CPU x86, los emuladores que ejecutan una imagen x86 (en lugar de una imagen basada en ARMv7 o ARMv8/ARM64) pueden hacer uso de las técnicas de virtualización integradas en la CPU, lo que resulta en una velocidad mucho mayor.

0 votos

Gracias por explicar detalladamente. Me gustaría poner un ejemplo. Si estoy en lo correcto, ya sea un procesador o un SoC, el término x86 está relacionado con Intel y AMD. Me gustaría poner un ejemplo.

0 votos

He pasado por el enlace apkmirror.com/apk/mozilla/firefox/firefox-65-0-1-release para descargar Firefox android apk. He visto dos variantes allí; Firefox android apk para la arquitectura armeabi-v7a y Firefox android apk para la arquitectura x86. Mi confusión comenzó desde allí.

0 votos

Por lo tanto, creo que necesito descargar la aplicación de Android para ARM. ¿Estoy en lo correcto?

1voto

John Dallman Puntos 103

Una respuesta más corta

Todos los dispositivos Android actuales en el mercado utilizan procesadores compatibles con ARM.

  • ARM Holdings diseña las arquitecturas básicas y ejemplos de procesadores. Los ejemplos modernos tienen nombres como Cortex-A78, Cortex-A720 o Cortex-X2.
  • Los fabricantes de chips, como Qualcomm, MediaTek, Huawei y Samsung, licencian las arquitecturas ARM. Diseñan SoCs, compuestos por procesadores ARM, memoria, GPUs, sistemas de radio digital y otros componentes electrónicos. Algunas de esas compañías fabrican los SoCs ellos mismos, mientras que otras subcontratan la fabricación a TSMC, SMIC u otras "fundiciones de chips".
  • Los fabricantes de chips tienen nombres de marca para sus SoCs: Qualcomm = Snapdragon; MediaTek = Helio; Samsung = Exynos y Huawei = Kirin. Su material de marketing tiende a omitir ARM porque quieren que parezca que sus productos son únicos y mucho superiores a la competencia.
  • Algunos fabricantes de chips mejoran los diseños de ARM de diversas maneras, y algunos tienen diseños genuinamente propios. Apple es un ejemplo notable, pero sus chips no se utilizan en dispositivos Android. Qualcomm planea introducir diseños propios bajo la marca "Oryon", probablemente a finales de 2024.
  • Los procesadores compatibles con ARM han existido en muchas variaciones. Android ha establecido algunos estándares mínimos diferentes para facilitar la compatibilidad de software. Esos se llaman "ABIs". armeabi-v7a es la ABI moderna de 32 bits; arm64-v8a es la ABI moderna de 64 bits. Sería absurdo hacer SoCs basados en ARM para el mercado Android que no fueran compatibles con las ABIs, y nadie lo hace.
  • Cuando se hizo esta pregunta por primera vez, armeabi-v7a estaba universalmente disponible en dispositivos modernos con arm64-v8a volviéndose ampliamente disponible. A mediados de 2023, arm64-v8a es prácticamente universal y armeabi-v7a está empezando a ser eliminada.

Había unos pocos dispositivos Android que admitían la ABI x86, pero nunca se usaron ampliamente. Prácticamente han desaparecido ahora. La ABI x86_64 se utiliza para emuladores, pero no en dispositivos. Intel y AMD, que fabrican procesadores x86 y x86-64, nunca han logrado alcanzar ratios de rendimiento y consumo de energía que compitan con ARM, y es poco probable que lo hagan, debido a la complejidad de la arquitectura x86. Producen procesadores más rápidos que la mayoría de los chips ARM, pero consumen mucho más energía, lo que los hace inadecuados para dispositivos alimentados por batería.

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