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

Al descargar aplicaciones de Android, a veces he visto aplicaciones armeabi-v7ay x86arquitectura.

Leí algunas referencias para armeabi-v7ay x86arquitectura. Sin embargo, al final, no pude finalizar a qué procesadores y arquitecturas móviles pertenecen armeabi-v7ay cuáles pertenecen 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 que 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?

EDITAR:
Para entender qué SoC es compatible con armeabi-v7aAndroid apk y qué SoC es compatible con x86Android apk, revisé las especificaciones de MediaTek Helio X30y Snapdragon 855. La especificación de Helio X30 dice que admite 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. Entonces, debo concluir que Helio X30 admitirá aplicaciones de Android y armeabi-v7aSnapdragon 855 no admitirá armeabi-v7aaplicaciones?

Por favor aclare mis confusiones.

Respuestas (2)

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

CONJUNTO DE INSTRUCCIONES:

Los procesadores están hechos de matrices semiconductoras, generalmente silicio monocristalino de grado electrónico. No saben inglés ni ningún otro idioma humano, solo entienden 0y 1. Entonces, 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 está estandarizado como Machine Languagey el conjunto de instrucciones de máquina se denomina Instruction Set. Un procesador puede actuar solo sobre tipos específicos de conjuntos de instrucciones.
Los conjuntos de instrucciones pueden ser de 8/16/32/64 bits (define cuántas instrucciones puede procesar un procesador a la vez), siendo las últimas 2 las más comunes en estos días.

IDIOMAS DE BAJO NIVEL:

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

IDIOMAS 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 (lo que indica una arquitectura específica). Estos son idénticos a los lenguajes humanos, por lo tanto, 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 Compilerun 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 compila previamente en código de máquina, sino que se ejecuta directamente (o compila durante la ejecución) por Interpreter. Java es uno de esos lenguajes de "escribir una vez, ejecutar en cualquier lugar" (WORA) que se compila byte-codey luego interpreta Virtual Machine, nuevamente un programa compilado.

INTERFAZ BINARIA DE LA APLICACIÓN (ABI):

Dado que un programa (código) independiente de la arquitectura se puede convertir en un código dependiente de la arquitectura para cualquier procesador, es deber del compilador ocuparse de todos los requisitos de una arquitectura específica. Eso es lo que define la interfaz binaria de aplicaciones (ABI). En términos simples, una ABI representa una o más arquitecturas específicas. Más detalles sobre las ABI integradas requieren una visión de las etapas de ensamblaje y compilación; código objeto, formato ejecutable y enlazable (ELF), enlace estático (archivo) y dinámico de bibliotecas, etc.

Ahora yendo a tu pregunta:

¿QUÉ SON x86Y ARM?

x86 es una familia de conjuntos de instrucciones, desarrollada y fabricada principalmente por Intel y AMD. ARM es otra familia, diseñada por una sola entidad ARM Holdingsy con licencia para muchos fabricantes de soluciones integradas, incluidos 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 SOC?

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

ABI ARM:

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 debe compilarse. Android proporciona su propio Kit de desarrollo nativo ( NDK ) que incluye (bibliotecas, archivos de encabezado y) un compilador que puede compilar código para múltiples ABI, incluidos armeabi-v7a( armhfen la comunidad de Linux) y x86.

La aplicación de Android (Java) en sí misma no es específica de una arquitectura. Durante el proceso de creación de la aplicación, el SDK de Android convierte la fuente de Java en código de bytes ( .classarchivos) y luego lo compila en el archivo ejecutable D alvik EX.dex ( ) que está repleto de .apkarchivos. Este código de bytes de Dalvik se interpreta y ejecuta en una instancia separada de Dalvik Virtual Machine/ ARTpara cada aplicación mediante un proceso llamado Zygote. O se puede compilar permanentemente en código de máquina nativo ( .odexo .oat) de acuerdo con la arquitectura del dispositivo durante la instalación de la aplicación (o más tarde ). Pero si el archivo apk (zip) además contiene archivos binarios/bibliotecas ELF, estos son específicos de la arquitectura. Los desarrolladores suelen incluir bibliotecas nativas para múltiples arquitecturas en sus aplicaciones.

Las aplicaciones/programas/binarios/ejecutables/bibliotecas nativas creadas con suites de compilación dirigidas ARM Embedded ABI v7a( armeabi-v7a ) se pueden ejecutar en Application profile of 7th version of ARM processors( Armv7-A ).
El código compilado con cadenas de herramientas proporcionadas por otros proveedores, con la misma arquitectura como objetivo (aunque con diferentes nombres de ABI) también debería ejecutarse en dispositivos Android.

32 BITS VS. 64 bits:

El procesador ARM puede ser de 32 bits o de 64 bits. Depende de los fabricantes de SoC lo que quieran construir con su sistema integrado, por ejemplo, Snapdragon puede ser de 32 bits o de 64 bits. Se mejoró el rendimiento de los procesadores ARM de 32 bits y se agregaron nuevas capacidades de la versión 2 a la versión 7. Se introdujo la compatibilidad con 64 bits en ARMv8.

Para saber si un dispositivo es de 32 bits o de 64 bits, debe verificar las especificaciones de su SoC y luego de su procesador. Por ejemplo, el SoC en Redmi Note 4 es Qualcomm Snapdragon 625 (MSM 8953) , que contiene un procesador Cortex-A53. Es evidente a partir de las especificaciones técnicas de Cortex-53 que se basa en ARMv8una arquitectura que puede procesar 2 tipos de conjuntos de instrucciones: aarch64(que usa la ABI arm64-v8a de Android ) y (que usa la ABI armeabi-v7aaarch32 de Android, es decir , compatible con versiones anteriores ).ARMv7

Por lo tanto, puede ejecutar archivos binarios/bibliotecas compilados para ambas ABI, pero no para x86 o armeabi(llamado armel en la comunidad de Linux; cuyo objetivo era la arquitectura ARMv5/v6y se eliminó en NDK r17).


RELACIONADO: ¿Podría un dispositivo de hardware de 64 bits ejecutar una versión de Android de 32 bits?

Nota al margen: para compatibilidad con ARM de 32 bits y ARM de 64 bits: Google exige la compatibilidad con 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 armeabisolo la compatibilidad con versiones anteriores.
Desde Android 9 , la compatibilidad con 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.

La cantidad de dispositivos de hardware que usan x86 nunca fue muy alta. Hace algunos años Intel tenía algunos procesadores x86 (Intel Atom) que se usaban en algunas tabletas Android (por ejemplo, Samsung Galaxy Tab 10.3).

Sin embargo, esas tabletas nunca alcanzaron un gran volumen en el mercado. Y no estoy seguro de si hay algún teléfono inteligente o tableta x86 en el mercado que todavía use una CPU x86.

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

Como la PC que ejecuta el emulador generalmente usa 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 de la CPU que dan como resultado una velocidad mucho mayor.

Gracias por explicar en detalle. Me gustaría tomar un ejemplo. Si no me equivoco, ya sea un procesador o un SoC, el término x86 está relacionado con Intel y AMD. Me gustaría tomar un ejemplo.
Revisé el enlace apkmirror.com/apk/mozilla/firefox/firefox-65-0-1-release para descargar la aplicación Android de Firefox. He visto dos variantes allí; Firefox android apk para arquitectura armeabi-v7a y Firefox android apk para arquitectura x86. Mi confusión comenzó a partir de ahí.
Los SoC de dispositivos Android conocidos son Snapdragon, MediaTek, Exynos, Kirin, etc. Por lo tanto, creo que necesito descargar la aplicación Android para ARM. ¿Tengo razón?
@ user741975 En este momento, si lo elige, armeabi-v7ase ejecutará con una probabilidad superior al 99%. Si tienes un dispositivo actual de gama media o alta también arm64-v8apuede ser una opción. De todos modos, puedes descargarlo e intentar instalarlo. Si la arquitectura es incorrecta, la instalación simplemente fallará.