support studio programar para not ndk generar desarrollo configured configurar android android-studio jni android-gradle

programar - ndk not configured android studio



Android multidex, UnsatisfiedLinkError-no se pudo encontrar el archivo.so (2)

Estoy tratando de agregar algo de lib (.jar & .so) a mi proyecto multidex en Android Studio.

cuando agrego solo unos pocos frascos al proyecto todo funciona bien. en caso de que agregue más y más jar (otras libs) recibo este error:

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.test.digital.ocrtest-2/base.apk"],nativeLibraryDirectories=[/data/app/com.test.digital.ocrtest-2/lib/arm, /data/app/com.test.digital.ocrtest-2/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]] couldn''t find "libScanovatePassportAndIDLSDK_CPP.so"

¿Alguna idea de cómo puedo decirle al compilador que genere jar y así en el mismo dex?


Hay una solución elegante para esto. Cuando su archivo APK no contiene todas las bibliotecas nativas en la versión de 64 bits para un determinado ABI, solo necesita asegurarse de que su archivo APK no contenga ninguna biblioteca de 64 bits. Aquí está el tutorial sobre cómo configurar su proyecto para solucionarlo: https://corbt.com/posts/2015/09/18/mixing-32-and-64bit-dependencies-in-android.html

Fondo Cuando su aplicación se instala en dispositivos ABI de 64 bits, el administrador de paquetes escanea el archivo APK durante la instalación y busca las bibliotecas nativas de 64 bits. Si encuentra la carpeta apropiada de la biblioteca nativa de 64 bits (puede verificar la carpeta / libs en su archivo APK si la abre con cualquier cliente zip) asume que todas las bibliotecas nativas están disponibles en versiones de 64 bits. Si una o más bibliotecas nativas no están disponibles en la versión de 64 bits, el administrador de paquetes no podrá cargar su versión de 32 bits. Por lo tanto, cuando la aplicación intente ejecutar código que dependa de estas librerías nativas, recibirá este mensaje InsatisfiedLinkError. Esto significa que la versión de 32 bits de tu biblioteca


Si algunos de los JAR extra traen libris nativas para armeabi-v7a , mientras que libScanovatePassportAndIDLSDK_CPP.so solo se creó para armeabi , el instalador extraerá un conjunto incorrecto de bibliotecas. La solución es no agregar más copias de .so , sino más bien eliminar las demás ABI. En gradle, puedes usar splits .