Al descargar aplicaciones de Android, a veces he visto aplicaciones para armeabi-v7a
y x86
arquitectura.
Leí algunas referencias para armeabi-v7a
y x86
. Sin embargo, al final, no pude determinar qué procesadores y arquitecturas móviles pertenecen a armeabi-v7a
y cuáles pertenecen a x86
.
Según mi conocimiento, los procesadores móviles que se utilizan comúnmente en los 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 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?
EDIT:
Para comprender qué SoC admite armeabi-v7a
Android apk y qué SoC admite x86
Android apk, he pasado por las especificaciones de MediaTek Helio X30
y Snapdragon 855
. La especificación de Helio X30 dice que admite doble -core ARM Cortex-A73 y ARM Cortex-A53 de cuatro núcleos pero ARM i no se menciona en ninguna parte de la especificación de Snapdragon 855. Entonces, debo concluir que Helio X30 admitirá armeabi-v7a
aplicaciones de Android y Snapdragon 855 no admitirá armeabi-v7a
aplicaciones?
Aclare mis confusiones.
Respuesta
Aquí están mis notas resumidas incompletas sobre el tema, pero lo suficiente para responder a su pregunta.
CONJUNTO DE INSTRUCCIONES:
Los procesadores están hechos de matrices de semiconductores, generalmente silicio monocristalino de grado electrónico. No saben inglés ni ningún otro idioma humano, solo entienden 0
y 1
. Entonces, el diseñador del procesador nos dice en qué secuencia de cero «sy uno» podemos instruir a ese procesador específico. Este lenguaje numérico de instrucciones está estandarizado como Machine Language
y el conjunto de instrucciones de la máquina se llama Instruction Set
. Un procesador solo puede actuar sobre tipos específicos de conjunto 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 los 2 últimos los más habituales 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 tomará años escribir y depurar un programa razonablemente más grande (que podemos escribir en unas pocas horas estos días). para que los programadores se sientan cómodos, lenguaje de ensamblaje Se desarrolló e, todavía un lenguaje específico del procesador pero 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 máquina. Ambos se denominan idiomas 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 ligados a un conjunto de instrucciones específico (que denota una arquitectura específica). 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 está precompilado en código de máquina, sino que se ejecuta directamente (o se compila durante la ejecución) por Interpreter
. Java es uno de esos lenguajes «escribir una vez, ejecutar en cualquier lugar» (WORA) que se compila en byte-code
y luego se interpreta con Virtual Machine
– nuevamente un programa compilado.
INTERFAZ BINARIA DE APLICACIÓN (ABI):
Dado que un programa (código) independiente de la arquitectura se puede convertir en código dependiente de la arquitectura para cualquier procesador, es deber del compilador atender todos los requisitos de una arquitectura específica. Eso es lo que Definición de interfaz binaria de aplicación (ABI). En términos simples, una ABI representa una o más arquitecturas específicas. Para obtener más detalles sobre las ABI integradas, es necesario conocer 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 llegamos a su pregunta:
¿QUÉ SON x86
Y ARM
?
x86 es una familia de conjuntos de instrucciones, principalmente desarrollados y fabricados por Intel y AMD. ARM es otra familia, diseñada por una sola entidad ARM Holdings
y con licencia para muchos fabricantes de soluciones integradas, incluidos Qualcomm, Mediatek, Samsung y Huawei. Snapdragon, Exynos y Kirin son sus nombres comerciales. 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) , Módulo WiFi y bluetooth, conectividad USB, UART (puertos serie), JTAG (un protocolo de comunicación serie de nivel muy inferior), GPS, módems (para conectividad celular) y posiblemente otros.
ARM ABI:
Aunque la mayor parte de las aplicaciones de Android está escrita en Java, se pueden 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 varias ABI, incluido armeabi-v7a
(armhf
en la comunidad de Linux) y x86
.
Aplicación de Android (Java) en sí no es específico de una arquitectura. Durante el proceso de compilación de la aplicación, el SDK de Android convierte la fuente de Java en código de bytes (archivos .class
) y luego lo compila en D alvik EX ecutable (.dex
) que está empaquetado con .apk
archivos. Este bytecode de Dalvik se interpreta y ejecuta en una instancia separada de Dalvik Virtual Machine
/ ART
para cada aplicación mediante un proceso llamado Zygote
. O se puede compilar permanentemente en código de máquina nativo (.odex
o ) 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) contiene adicionalmente binarios / bibliotecas ELF, esos son específicos de la arquitectura. Los desarrolladores suelen incluir bibliotecas nativas para múltiples arquitecturas en sus aplicaciones.
Aplicaciones / programas / binarios / ejecutables / bibliotecas nativas creadas con conjuntos de compiladores dirigidos a ARM Embedded ABI v7a
( armeabi-v7a ) se puede ejecutar en Application profile of 7th version of ARM processors
( Armv7-A ).
El código compilado con cadenas de herramientas proporcionadas por otros proveedores, cuyo objetivo es la misma arquitectura (aunque con diferentes nombres de ABI) también debería ejecutarse en dispositivos Android.
32-BIT VS. 64-BIT:
El procesador ARM puede ser de 32 o 64 bits. Depende de los fabricantes de SoC lo que quieran construir con su sistema integrado, p. Ej. Snapdragon puede ser de 32 o 64 bits. Se mejoraron los procesadores ARM de 32 bits para mejorar el rendimiento y se agregaron nuevas capacidades desde la versión 2 a la versión 7. Se introdujo soporte de 64 bits en ARMv8.
Para saber si un dispositivo es de 32 bits o de 64 bits. bit, 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 procesador Cortex-A53
. Es evidente a partir de las especificaciones técnicas de Cortex-53 que se basa en la arquitectura ARMv8
, que puede procesar 2 tipos de conjuntos de instrucciones: aarch64
(que utiliza la ABI arm64-v8a de Android) y aarch32
(que utiliza Android «s armeabi-v7a ABI, es decir, compatible con ARMv7
).
Por lo tanto, puede ejecutar binarios / bibliotecas compiladas para ambas ABI, pero no para x86 o armeabi
(llamado armel en la comunidad de Linux; que apuntó a la arquitectura ARMv5/v6
y fue eliminado en NDK r17
).
RELACIONADO: ¿Podría un dispositivo de hardware de 64 bits ejecutar una versión de Android de 32 bits?
Comentarios
Responder
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, esos comprimidos 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 un «dispositivo Android x86»: Emulador.
Como la PC que ejecuta el emulador normalmente 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 resultan una velocidad mucho mayor.
Comentarios
- Gracias por explicarnos en detalle. Me gustaría dar un ejemplo. Si estoy en lo cierto, ya sea un procesador o un SoC, el término x86 está relacionado con Intel y AMD. Me gustaría tomar un ejemplo.
- He pasado por el enlace apkmirror.com/apk/mozilla/firefox/firefox-65-0-1 -release para descargar la apk de Android de Firefox. 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í.
- SoC de dispositivos Android conocidos son Snapdragon, MediaTek, Exynos, Kirin, etc. Por lo tanto, creo que necesito descargar la apk de Android para ARM. ¿Estoy en lo cierto?
- @ user741975 Por el momento, si eliges
armeabi-v7a
, se ejecutará con una probabilidad superior al 99%. Si tiene un dispositivo actual de clase media o alta, tambiénarm64-v8a
puede ser una opción. De todos modos, puedes descargarlo e intentar instalarlo. Si la arquitectura es incorrecta, la instalación simplemente fallará.
armeabi
solo para soporte hacia atrás.