¿Por qué utilizar el código armeabi-v7a sobre el código armeabi?


En mi proyecto actual hago uso de varios archivos .so. Estos se encuentran en la carpeta armeabi y armeabi-v7a. Desafortunadamente uno de los archivos. so es un 6MB y necesito reducir el tamaño del archivo. En lugar de tener un archivo APK fat, me gustaría usar solo los archivos armeabi y eliminar la carpeta armeabi-v7a.

De acuerdo con la documentación de NDK, el código armeabi-v7a es un código armeabi extendido que puede contener instrucciones adicionales de la CPU. Todo esto va más allá de mi experiencia, pero me pregunto por qué uno me gustaría tener tanto armeabi-v7a y armeabi código. Debe haber una buena razón para tener ambos, ¿verdad?

En mis dispositivos de prueba todo esto parece funcionar bien. Estos tienen CPU ARM v7. ¿Es seguro asumir que todo funciona ahora?

Author: Sam Rad, 2011-08-16

3 answers

Depende de lo que haga su código nativo, pero v7a tiene soporte para operaciones de punto flotante de hardware, lo que hace una gran diferencia. armeabi funcionará bien en todos los dispositivos, pero será mucho más lento y no aprovechará las capacidades de CPU de los dispositivos más nuevos. Tome algunos puntos de referencia para su aplicación en particular, pero eliminar los binarios armeabi-v7a generalmente no es una buena idea. Si necesita reducir el tamaño, es posible que desee tener dos apk separados para mayores (armeabi) y más recientes (armeabi-v7a) dispositivos.

 149
Author: Nikolay Elenkov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-16 17:07:19

EABI = Interfaz Binaria de Aplicación integrada. Son estas especificaciones a las que debe ajustarse un ejecutable para ejecutarse en un entorno de ejecución específico. También especifica varios aspectos de compilación y enlace necesarios para la interoperabilidad entre cadenas de herramientas utilizadas para la arquitectura ARM. En este contexto, cuando hablamos de armeabi hablamos de la arquitectura ARM y del sistema operativo GNU/Linux. Android sigue al little-endian ARM GNU / Linux ABI.

Aplicación Armeabi se ejecutará en ARMv5 (por ejemplo, ARM9) y ARMv6 (por ejemplo, ARM11). Puede usar hardware de Punto flotante si compila su aplicación usando las opciones adecuadas de GCC como -mfpu=vfpv3-mfloat-abi=softfp que le dice al compilador que genere instrucciones de punto flotante para el hardware de VFP y habilita las convenciones de llamadas de flotador suave. armeabi no soporta las convenciones de llamadas hard-float (esto significa que los registros FP no se utilizan para contener argumentos para una función), pero las operaciones FP en HW siguen siendo apoyar.

La aplicación Armeabi-v7a se ejecutará en dispositivos Cortex A# como Cortex A8, A9 y A15. Soporta procesadores multi-core y soporta -mfloat-abi=hard. Por lo tanto, si compila su aplicación usando -mfloat-abi=hard, muchas de sus llamadas a funciones serán más rápidas.

 58
Author: psihodelia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-19 10:43:53

En lugar de tener un archivo APK fat, me gustaría usar solo los archivos armeabi y eliminar la carpeta armeabi-v7a.

Lo contrario es una estrategia mucho mejor. Si tienes minSdkVersion a 14 y subes tu apk a play store, notarás que admitirás el mismo número de dispositivos, ya sea que admitas armeabi o no. Por lo tanto, no hay dispositivos con Android 4 o superior que se beneficiarían de armeabi en absoluto.

Esta es probablemente la razón por la Android NDK ni siquiera soporte armeabi más según la revisión r17b. 1

 1
Author: Cristan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-26 06:57:48