¿Qué son arm64-v8a, armeabi-v7a y armeabi en Android?

prefacio

En primer lugar: ¿ARM es un caballo mágico?
R: ARM es la arquitectura de CPU de nuestro dispositivo.

En segundo lugar: ¿arm64-v8a, armeabi-v7a, armeabi son caballos mágicos?
Respuesta: En el sistema Android, cada arquitectura de CPU corresponde a una ABI. Son nuestros tipos de ABI
inserte la descripción de la imagen aquí
Finalmente: ¿Qué es el ABI?
Respuesta: La interfaz binaria de la aplicación (Application Binary Interface) define cómo se ejecutan los archivos binarios (especialmente los archivos .so) en la plataforma del sistema correspondiente, desde el conjunto de instrucciones utilizado, la alineación de la memoria hasta las bibliotecas de funciones del sistema disponibles.

Suplemento: consulta la línea de comando de la CPU del teléfono móvil
Respuesta:adb shell getprop ro.product.cpu.abi
inserte la descripción de la imagen aquí

tema

armeabi-v7a: La versión principal antes de la arquitectura ARM v7, y ahora hay muchas.
arm64-v8a: soporte de 64 bits, la versión principal actual.

Cómo funcionan los ABI

Un dispositivo Android puede admitir varias ABI, ABI principal del dispositivo y ABI secundaria.
Para dispositivos con arm64-v8a como ABI principal, las ABI auxiliares son armeabi-v7a y armeabi.
Para dispositivos con armeabi-v7a como ABI principal, la ABI auxiliar es armeabi.

Proceso de adaptación específico de ABI

Para un teléfono móvil cuya CPU es arquitectura arm64-v8a, cuando ejecuta la aplicación, al ingresar jnilibs para leer el archivo de la biblioteca, primero verifique si hay una carpeta arm64-v8a, si no hay tal carpeta, vaya a armeabi- carpeta v7a, si No, vaya a la carpeta armeabi nuevamente, si no hay tal carpeta, se lanzará una excepción.
Si hay una carpeta arm64-v8a, busque el archivo .so con un nombre específico. Nota: si no encuentra el archivo .so que desea, no bajará (carpeta armeabi-v7a) para encontrar pero simplemente tírelo a la basura.

Cómo adaptarse en el proyecto

Pregunta: Solo es compatible con armeabi-v7a, por lo que si se instala la APP en un móvil con otras arquitecturas, como arm64-v8a, ¿saltará?
Respuesta: No, pero viceversa. Porque armeabi-v7a y arm64-v8a serán compatibles con versiones anteriores:

Las aplicaciones solo compatibles con armeabi pueden ejecutarse en armeabi, x86, x86_64, armeabi-v7a, arm64-v8
Solo compatibles con armeabi-v7a pueden ejecutarse en armeabi-v7a y arm64-v8a
solo compatibles con arm64-v8a pueden ejecutarse en arm64- en v8a

¿Cuáles son las soluciones de adaptación?
1. Solo se adapta a armeabi Ventajas: básicamente se adapta a todas las arquitecturas de CPU (excepto mips y mips_64 eliminados) Inconvenientes: bajo rendimiento, equivalente a la necesidad de ABI auxiliar o transcodificación dinámica para ser compatible en la mayoría de los teléfonos móviles.
2. Solo es compatible con armeabi-v7a. Lo mismo se aplica a la solución 1, pero se excluyen algunos dispositivos antiguos, que es más equilibrado en rendimiento y compatibilidad.
3. Solo se adapta a arm64-v8 Ventajas: el mejor rendimiento Desventajas: solo se puede ejecutar en arm64-v8, algunos usuarios de equipos antiguos tienen que renunciar.

Estas tres soluciones son todas posibles. En la adaptación actual de aplicaciones de los principales fabricantes, existen las tres, y la mayoría de ellas son las dos primeras soluciones. Cuál elegir depende de sus propias consideraciones, arm64-v8 para compatibilidad, armeabi para compatibilidad y armeabi-v7a para un pequeño equilibrio entre los dos.

Configuración de embalaje

dividir

Este comando se puede subcontratar de acuerdo con varias reglas, como la subcontratación de acuerdo con abi, densidad de pantalla (es decir, ldpi, hdpi, etc.).

splits { 
   
        abi { 
   
            enable true
            reset()
            include 'x86','armabi'
            exclude 'armeabi', 'armeabi-v7a', "arm64-v8a"
            universalApk true
        }
    }

filtro ndk{abiFilters:}

Este comando se puede configurar para empaquetar solo la biblioteca so que configuró y no para empaquetar las que no están configuradas, lo cual es muy flexible. Archivo aar de terceros, si el sdk es compatible con abi de manera integral, puede incluir armeabi, armeabi-v7a, x86, arm64-v8a, x86_64 cinco abi, mientras que otros, por lo que usa solo es compatible con armeabi, armeabi-v7a, x86 Tres, consulte directamente al aar del sdk, y compilará automáticamente un paquete que admita 5 tipos de abi. Pero la otra parte de la aplicación carece de soporte para las otras dos abi, por lo que si la aplicación se ejecuta en el dispositivo con arm64-v8a y x86_64 como la abi preferida, fallará, por lo que debemos configurar la configuración de abiFilter en nuestra aplicación para evitar errores desconocidos

//过滤x86的so库
ndk { 
   
    abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
}

Esta configuración empaquetará las bibliotecas so en los tres paquetes de armeabi, armeabi-v71 y arm64-v8a en un solo apk, a diferencia de las divisiones, que empaquetarán un apk para cada paquete.

Guess you like

Origin blog.csdn.net/weixin_45112340/article/details/129236358