studio saber ndk como android jni 32bit-64bit

saber - Utilice bibliotecas jni de 32 bits en Android de 64 bits



como saber si mi android es de 32 o 64 bits (6)

el punto es convertir el entorno de ejecución a 32 bits

  1. agregue el siguiente contenido en ''build.gradle'' ''defaultConfig'': ndk {abiFilters "armeabi", "armeabi-v7a", "x86", "mips"}
  2. agregar android.useDeprecatedNdk = true en gradle.properties
  3. agrega una nueva carpeta llamada armeabi bajo las libs, luego copia un archivo ".so" de 32 bits en la nueva carpeta

Intenté ejecutar una aplicación usando una biblioteca nativa en el Nexus 9.

La aplicación sale con un mensaje de error:

java.lang.UnsatisfiedLinkError: dlopen failed: "lib_xyz.so" is 32-bit instead of 64-bit

¿Hay alguna solución conocida para este problema (excepto, por supuesto, volver a compilar la biblioteca y hacer que la apk sea más grande)?




Encontré una explicación: Android de 64 bits puede usar bibliotecas nativas de 32 bits como alternativa, solo si System.loadlLibrary () no puede encontrar nada mejor en la ruta de búsqueda predeterminada. Obtiene un UnsatisfiedLinkError si fuerza al sistema a cargar la biblioteca de 32 bits utilizando System.load () con la ruta completa de la biblioteca. Así que la primera solución es usar System.loadLibrary () en lugar de System.load ().

Una cosa adicional que debe tenerse en cuenta es que las bibliotecas no se pueden combinar: el comportamiento alternativo solo se aplica a la primera biblioteca que cargue su aplicación. Si el primero es de 64 bits, la misma aplicación no puede cargar bibliotecas de 32 bits, y viceversa.


Me encontré con el mismo problema, cuando hice la actualización de Android Studio 2.1 a 2.2.3 (con ndk v.13.1), y ninguna sugerencia encontrada en google realmente me ayudó (como usar abiFilters, excluir ''lib / x86_64 / lib .... entonces '', LOCAL_MULTILIB: = 32, o TARGET_PREFER_32_BIT: = verdadero, ...).

Finalmente, pude hacer que funcionase nuevamente con la última versión AS v2.2.3 (sin cambiar nada en Android.mk o en build.gradle), simplemente usando mi compilador ndk anterior, es decir, android-ndk-r10e

Construí la biblioteca manualmente con ndk-build para "armeabi-v7a" y "x86" solamente, y funcionó como un encanto en Android con arm64.


Para mí, el problema fue que habilité la función avanzada de creación de perfiles en la configuración de compilación de la aplicación