La librería NDK de Android no se carga en tiempo de ejecución para los teléfonos samsung galaxy 4.0.2

Estoy intentando probar mi programación de NDK en diversos teléfonos. La misma aplicación se ejecuta en todos los demás teléfonos, pero en samsung 4.0.2 sólo se detiene, lanzando el siguiente error. ¿Estoy perdiendo algo? Cualquier ayuda es apreciada

10-29 12:02:57.729: E/AndroidRuntime(3626): at android.app.Activity.performCreate(Activity.java:4486) 10-29 12:02:57.729: E/AndroidRuntime(3626): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052) 10-29 12:02:57.729: E/AndroidRuntime(3626): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931) 10-29 12:02:57.729: E/AndroidRuntime(3626): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992) 10-29 12:02:57.729: E/AndroidRuntime(3626): at android.app.ActivityThread.access$600(ActivityThread.java:127) 10-29 12:02:57.729: E/AndroidRuntime(3626): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158) 10-29 12:02:57.729: E/AndroidRuntime(3626): at android.os.Handler.dispatchMessage(Handler.java:99) 10-29 12:02:57.729: E/AndroidRuntime(3626): at android.os.Looper.loop(Looper.java:137) 10-29 12:02:57.729: E/AndroidRuntime(3626): at android.app.ActivityThread.main(ActivityThread.java:4511) 10-29 12:02:57.729: E/AndroidRuntime(3626): at java.lang.reflect.Method.invokeNative(Native Method) 10-29 12:02:57.729: E/AndroidRuntime(3626): at java.lang.reflect.Method.invoke(Method.java:511) 10-29 12:02:57.729: E/AndroidRuntime(3626): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:976) 10-29 12:02:57.729: E/AndroidRuntime(3626): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:743) 10-29 12:02:57.729: E/AndroidRuntime(3626): at dalvik.system.NativeStart.main(Native Method) **10-29 12:02:57.729: E/AndroidRuntime(3626): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1285]: 161 cannot locate '__aeabi_idiv0'...** 10-29 12:02:57.729: E/AndroidRuntime(3626): at java.lang.Runtime.loadLibrary(Runtime.java:370) 10-29 12:02:57.729: E/AndroidRuntime(3626): at java.lang.System.loadLibrary(System.java:535) 

Hay un error conocido en Android 4.0 con la carga de bibliotecas nativas que puede ser la causa de su problema. Escribí un blogpost detallado en él si usted desea zambullirse en los detalles. Larga historia corta:

Supongo que la biblioteca que está intentando utilizar se compila para diferentes arquitecturas (generalmente armeabi y armeabi-v7a, respectivamente almacenadas en libs/armeabi y libs/armeabi-v7a ). En Android 4.0, el método System.loadLibrary() está desordenado: al intentar cargar libsomething.so biblioteca, en lugar de buscar la biblioteca nativa en la carpeta correspondiente a la arquitectura del dispositivo, se carga la primera biblioteca con nombre libsomething.so se encuentra en cualquier subcarpeta libs , potencialmente cargando la arquitectura equivocada, que puede causar un accidente.

La solución más sencilla:

  • Dar nombres diferentes a las bibliotecas en función de su arquitectura, por ejemplo libsomething.so para armeabi y libsomething-v7a.so para armeabi-v7a. De esta manera, cuando se utiliza System.loadLibrary() , no puede confundirse por el hecho de que varios archivos tienen el mismo nombre.
  • Una vez hecho esto, el problema es que usted debe saber cuál de estos dos nombres de archivo cargar con System.loadLibrary() , es decir , debe detectar la arquitectura utilizada por el dispositivo por usted mismo. Hay varias maneras de hacer eso: uno de ellos es usar el android_getCpuFeatures() del archivo cpu-features.h de código nativo (explicado en el blogpost anterior), otro es analizar el archivo de sistema /proc/cpuinfo de Java (Por ejemplo, como se explica aquí )

¡Espero que esto ayude!

  • Error: Error de ejecución para la tarea ': app: mergeDebugResources'
  • ServiceTestCase <T> .getService?
  • Detección más rápida de un socket roto en Java / Android
  • Servicio ha filtrado IntentReceiver en android
  • ¿Por qué no funciona mi servicio en Android? (Sólo quiero registrar algo nunca 5 segundos)
  • Android: Constructor es ambiguo cuando paso Null, pero no cuando paso una variable asignada a Null
  • Cálculo de suma en android / java
  • Establecer la fecha / hora de Android mediante programación
  • ¿Hay alguna manera de utilizar interfaces funcionales Java 8 en la API de Android por debajo de 24?
  • Obtención del valor del sensor de luz
  • ¿Existe un equivalente de ucwords en java?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.