En mi proyecto actual, utilizo múltiples archivos .so. Estos se encuentran en la carpeta armeabi y armeabi-v7a. Lamentablemente, uno de los archivos .so es de 6 MB y necesito reducir el tamaño del archivo. En lugar de tener un archivo APK gordo, me gustaría usar solo los archivos armeabi y eliminar la carpeta armeabi-v7a.
De acuerdo con la documentación del 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é a uno le gustaría tener el código armeabi-v7a y armeabi. 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?
fuente
armeabi is deprecated in NDK r16. Removed in NDK r17. No hard float.
Respuestas:
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 archivos binarios armeabi-v7a generalmente no es una buena idea. Si necesita reducir el tamaño, es posible que desee tener dos aplicaciones separadas para dispositivos más antiguos (armeabi) y más nuevos (armeabi-v7a).
fuente
EABI = Interfaz binaria de aplicación integrada. Es en esas especificaciones que un ejecutable debe cumplir para poder ejecutarse en un entorno de ejecución específico. También especifica varios aspectos de compilación y vinculación necesarios para la interoperación entre cadenas de herramientas utilizadas para la arquitectura ARM. En este contexto, cuando hablamos de armeabi , hablamos de arquitectura ARM y sistema operativo GNU / Linux. Android sigue el little endian ARM GNU / Linux ABI.
La aplicación armeabi se ejecutará en ARMv5 (por ejemplo, ARM9) y ARMv6 (por ejemplo, ARM11). Puede usar el hardware de punto flotante si crea su aplicación utilizando 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 VFP y habilita las convenciones de llamada de flotación suave. armeabi no admite convenciones de llamada de flotación dura (significa que los registros FP no se utilizan para contener argumentos para una función), pero las operaciones FP en HW aún son compatibles.
La aplicación armeabi-v7a se ejecutará en dispositivos Cortex A # como Cortex A8, A9 y A15. Es compatible con procesadores multi-core y es compatible con -mfloat-abi = hard . Entonces, si construye su aplicación usando -mfloat-abi = hard , muchas de sus llamadas a funciones serán más rápidas.
fuente
The armeabi-v7a ABI uses the -mfloat-abi=softfp switch
. Entonces, ¿qué quieres decir con soportes -mfloat-abi = hard ?Lo contrario es una estrategia mucho mejor. Si tiene
minSdkVersion
que 14 y sube su apk a la Play Store, notará que admitirá la misma cantidad de dispositivos, ya sea que lo admitaarmeabi
o no. Por lo tanto, no hay dispositivos con Android 4 o superior que se beneficiaríanarmeabi
en absoluto.Esta es probablemente la razón por la que Android NDK ya ni siquiera es compatible
armeabi
según la revisión r17b. [ fuente ]fuente