Error "No se puede encontrar la biblioteca nativa" en la aplicación Native Activity
Tengo algunos problemas con mi aplicación de actividad nativa. Funciona bien en el 99% de los dispositivos. Pero a veces los usuarios obtienen el siguiente error:
java.lang.RuntimeException: Unable to start activity ComponentInfo{nightradio.sunvox/nightradio.sunvox.MyNativeActivity}: java.lang.IllegalArgumentException: Unable to find native library: sundog at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2070) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2095) at android.app.ActivityThread.access$600(ActivityThread.java:134) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1203) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4830) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) at dalvik.system.NativeStart.main(Native Method) ...
No entiendo por qué. La aplicación tiene todas las bibliotecas necesarias en las carpetas armeabi, armeabi-v7a y x86. Y se ha probado en muchos dispositivos con diferentes arquitecturas.
- Opencv Android: java.lang.UnsatisfiedLinkError: dlopen falló: no se pudo cargar la librería "libopencv_java.so"
- Error de Android NDK ndk-build helloJni
- ¿El uso de la arquitectura de Android?
- Compilando ICU para Android - 'uint64_t' no nombra un tipo
- Lectura de archivos de recursos de mi propio APK en Android Native Environment
Android: hasCode = "true" existe.
También me di cuenta, que la mayoría de estos dispositivos problemáticos tiene CPU Rockchip (RK3066, RK2928, RK2926). Pero no todos. La última tiene la CPU Huawei K3V2 y una gran cantidad de memoria libre. Otras aplicaciones de la actividad nativa (no la mía) no funcionan en el dispositivo más reciente.
- android ffmpeg opengl es hacer película
- ¿Cuál es la regla que el sistema Android carga la biblioteca nativa (por lo que el archivo) de armeabi, armeabi-v7a, arm64-v8a?
- C / C ++ printfs - ¿Dónde aparece en un código nativo de Android?
- Cómo utilizar los archivos de encabezado precompilados en Android NDK
- MuPdf Android JNI biblioteca es muy grande
- Newbie en Android NDK: definición en Android.mk
- Error 1 libavcodec.so Formato de archivo no reconocido Android GL Live Wallpaper
- Android NDK tiempos de construcción MUY largos
Necesitará leer la salida logcat para ver qué pasó antes del bloqueo, lo que impidió la carga de la biblioteca nativa. Utilizo Acra para mis aplicaciones (genera informes de fallo que contienen salida logcat), pero como una solución rápida para obtener la salida logcat sin implementar un sistema completo de informes de fallos, podría usar algo como esto en una compilación de prueba y hacer que el usuario lo ejecute :
try { Process process = Runtime.getRuntime().exec( "logcat -d" ); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader( process.getInputStream() ) ); StringBuilder log = new StringBuilder(); String line = ""; while( ( line = bufferedReader.readLine() ) != null ) { log.append( line ); } // Output available via log.toString().. do whatever with it } catch( IOException e ) {}
Si observa el código fuente de NativeActivty , esta excepción que está viendo se activa en el método onCreate () (vea la línea 171), por lo que si reemplaza ese método en una clase derivada de NativeActivity, puede capturarla y tomar el logcat Salida de allí. A continuación, puede guardar el registro en un archivo y hacer que un usuario con un dispositivo afectado ejecute la prueba y le envíe por correo electrónico el archivo, por ejemplo.
Otra cosa buena sobre reemplazar onCreate (), es que también le permitirá reproducir algo de lo que sucede detrás de las escenas, con más registro de depuración para ayudarle a rastrear el problema.
- Android PagerAdapter no informa de la posición correcta si hace clic en el elemento anterior
- Iniciar una animación onstart CustomViewPager