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.

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.

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.

  • LOCAL_LDLIBS vs. LOCAL_LDFLAGS
  • Unicode y Android NDK
  • Android NDK clang compilador no puede encontrar std :: make_unique
  • ¿Alguna posibilidad de reducir el tiempo de obturación con el acceso a la cámara NDK de Android?
  • Pasos de convertir el proyecto C ++ opencv en la computadora a opencv android
  • ¿Cómo instalar el paquete / herramienta Android Studio 2.2 CMake?
  • ¿Cómo acceder a recurso con nombre dinámico en mi caso?
  • ¿Por qué no se está copiando libgnustl_shared.so desde mi APK?
  • UnsatisfiedLinkError En Android 4.4 libDevil no puede encontrar el símbolo "png_set_longjmp_fn"
  • Problema de migración de desarrollo nativo de Android Studio 2.2
  • Comunicación de LocalSocket con el dominio de Unix en Android NDK
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.