Función nativa no se ha encontrado ninguna implementación
Problema: el 20% de los usuarios reciben:
Fatal Exception: java.lang.UnsatisfiedLinkError No implementation found for java.lang.String com.example.utils.API.getHashString(android.content.Context) (tried Java_com_example_utils_API_getHashString and Java_com_example_utils_API_getHashString__Landroid_content_Context_2)
Para otra aplicación del 80% que funciona perfectamente, no hay excepción en mis dispositivos de prueba también. No puedo averiguar cuál es el problema.
- Módulos no definidos al cambiar a una versión más reciente de android ndk
- Java.lang.UnsatisfiedLinkError: No se ha encontrado ninguna implementación para Boolean
- Android mupdf libmupdf.so error de ejecución "Ninguna implementación encontrada para openFile nativo"
- Enviar int s entre Java y C
- Android NDK no puede depurar código nativo con dos complementos de gradle
EDIT1 : La biblioteca se carga perfectamente en la pantalla de bienvenida. No hay excepción en ese punto.
static { System.loadLibrary("my-lib"); }
EDIT2 : Acaba de reproducir el error. Es absolutamente al azar. La función de función de la aplicación funciona bien y en algún momento comienza a fallar. La única solución es volver a instalar la aplicación.
- La opción CheckJNI no funciona
- Android Java JNI y C Char array No se puede reconocer el valor
- Pruebas unitarias Llamadas JNI
- Android ICS: intento de error JNI para usar referencia local obsoleta 0x1
- CheckJNI de Android: ¿Cómo apagarlo / encender (en un emulador)? La documentación parece estar defectuosa
- ¿Cómo importar correctamente una biblioteca de Android con código JNI?
- Libusb_open_device_with_vid_pid falló al intentar acceder al dispositivo USB
- Cómo agregar .so, .mk y otros archivos nativos en Android Studio?
Después de mi comentario y comentarios posteriores de @ stanislav-parkhomenko, estoy repostando como una respuesta. ¡Gracias!
Mi comentario:
¿Dónde está ubicado el bloque estático {…}? Una posible razón para esto podría ser que el código no se ejecuta antes de algunas llamadas.
Y más tarde confirmó por sí mismo que esto era la causa:
El problema estaba en la inicialización de la biblioteca. Pantalla de inicio no siempre, debido a la funcionalidad de compartir, es por eso que algunas veces no se carga la biblioteca.
Gracias a Xavier Rubio Jansana por el consejo, que curó mi ceguera.
Me alegra que ayudó!
Este error se debe a la falta de coincidencia de firma de método entre Java y la biblioteca nativa que está cargando. Es probable que el 20% de los usuarios tengan una versión diferente del archivo de biblioteca con el mismo nombre. Si es tu propia biblioteca intenta darle un nombre relativamente único y cargarlo desde el camino absoluto para reducir la probabilidad de conflicto de nombres.
Parece que está intentando cargar una biblioteca nativa, y no hay soporte en Android Gradle
para código nativo todavía. Debe revisar los documentos de su biblioteca para confirmarlos; Intenté buscarlo, pero parece que es una biblioteca comercial sin documentos accesibles al público.
Podrías poner los archivos jniLibs
en la carpeta jniLibs
en src/main
. Esto se introdujo en AS 0.7.2
Como muestra, vea esto desde @CommonsWare , o vea esta página para muestras oficiales (desplácese al final de la página)
Sí Todavía no hay soporte para la biblioteca nativa en Android gradle.Just he seguido simple hack.It funciona muy bien. Mira esto