Utilice bibliotecas jni de 32 bits en Android de 64 bits

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 comstackr 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.

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. agregue una nueva carpeta llamada armeabi bajo las libs, luego copie un archivo .so 32 bits en la nueva carpeta

https://source.android.com/source/64-bit-builds.html

Prueba esto en tu Android.mk

 LOCAL_MULTILIB := 32 

Nop, necesitas hacer que la biblioteca nativa sea compatible con 64 bits para que funcione.

Consulte la documentación oficial: Consejos JNI: Consideraciones de 64 bits

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 comstackdor 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 comstackción de la aplicación