0 votos

dlopen falló: la biblioteca "/system/lib/libhoudini.so" no se encontró

Mi juego Android está construido con cocos2dx 3.0, y funciona bien en mi Nexus 5. Sin embargo, mis amigos que tienen Galaxy S4 dice que el juego se bloquea al abrir.

Editar : probado con más dispositivos. Funciona en Nexus 5 Lollipop y Nexus 7 Lollipop. No funciona en Galaxy S4 KitKat, Galaxy Note 3 KitKat y Nexus 5 KitKat. Parece que funciona en la API 21 pero no en la 19. Sin embargo, he configurado ambos minSDKversion y la versión de destino a 19 que es KitKat)

Así que descargué el emulador Genymotion para simular en el Galaxy S4 ya que el emulador Android SDK no parecía tener el Galaxy S4 en la lista. Entonces descubrí que Genymotion no funciona con APKs construidos para ARM. Por lo tanto, he añadido la línea APP_ABI := armeabi armeabi-v7a x86 en application.mk para que el APK sea compatible con las tres arquitecturas.

Además, he modificado el código de cocos2dx para tratar Genymotion como emulador.

if (product != null) {
    isEmulator = product.equals("sdk") || product.contains("_sdk") || product.contains("sdk_") || product.contains("vbox");
} // vbox part is the added part

Ahora, cuando instalo y ejecuto el APK en el emulador del S4, se bloquea con el error que dice

12-22 22:22:34.502: D/Cocos2dxActivity(1280): model=Samsung Galaxy S4 - 4.4.4 - API 19 - 1080x1920
12-22 22:22:34.506: D/Cocos2dxActivity(1280): product=vbox86p
12-22 22:22:34.506: D/Cocos2dxActivity(1280): isEmulator=true
12-22 22:22:34.510: D/dalvikvm(1280): Trying to load lib /data/app-lib/com.DoomChitGames.LittleSnake-2/libcocos2dcpp.so 0xa508c970
12-22 22:22:34.514: E/dalvikvm(1280): dlopen("/data/app-lib/com.DoomChitGames.LittleSnake-2/libcocos2dcpp.so") failed: dlopen failed: library "/system/lib/libhoudini.so" not found
12-22 22:22:34.514: D/AndroidRuntime(1280): Shutting down VM
12-22 22:22:34.514: W/dalvikvm(1280): threadid=1: thread exiting with uncaught exception (group=0xa4d00b20)
12-22 22:22:34.514: E/AndroidRuntime(1280): FATAL EXCEPTION: main
12-22 22:22:34.514: E/AndroidRuntime(1280): Process: com.DoomChitGames.LittleSnake, PID: 1280
12-22 22:22:34.514: E/AndroidRuntime(1280): java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libhoudini.so" not found
12-22 22:22:34.514: E/AndroidRuntime(1280):     at java.lang.Runtime.loadLibrary(Runtime.java:364)
12-22 22:22:34.514: E/AndroidRuntime(1280):     at java.lang.System.loadLibrary(System.java:526)
12-22 22:22:34.514: E/AndroidRuntime(1280):     at org.cocos2dx.lib.Cocos2dxHelper.init(Cocos2dxHelper.java:94)
12-22 22:22:34.514: E/AndroidRuntime(1280):     at org.cocos2dx.lib.Cocos2dxActivity.onCreate(Cocos2dxActivity.java:84)
12-22 22:22:34.514: E/AndroidRuntime(1280):     at android.app.Activity.performCreate(Activity.java:5231)
12-22 22:22:34.514: E/AndroidRuntime(1280):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
12-22 22:22:34.514: E/AndroidRuntime(1280):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
12-22 22:22:34.514: E/AndroidRuntime(1280):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
12-22 22:22:34.514: E/AndroidRuntime(1280):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
12-22 22:22:34.514: E/AndroidRuntime(1280):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
12-22 22:22:34.514: E/AndroidRuntime(1280):     at android.os.Handler.dispatchMessage(Handler.java:102)
12-22 22:22:34.514: E/AndroidRuntime(1280):     at android.os.Looper.loop(Looper.java:136)
12-22 22:22:34.514: E/AndroidRuntime(1280):     at android.app.ActivityThread.main(ActivityThread.java:5001)
12-22 22:22:34.514: E/AndroidRuntime(1280):     at java.lang.reflect.Method.invokeNative(Native Method)
12-22 22:22:34.514: E/AndroidRuntime(1280):     at java.lang.reflect.Method.invoke(Method.java:515)
12-22 22:22:34.514: E/AndroidRuntime(1280):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
12-22 22:22:34.514: E/AndroidRuntime(1280):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
12-22 22:22:34.514: E/AndroidRuntime(1280):     at dalvik.system.NativeStart.main(Native Method)
12-22 22:22:38.490: I/Process(1280): Sending signal. PID: 1280 SIG: 9

¿Alguien sabe cuál es el problema?

3voto

PsychoBoyJack Puntos 36

Houdini es una biblioteca proporcionada por Intel para convertir los intrínsecos de ARM NEON a las instrucciones SSE correspondientes en tiempo de ejecución. Parece que cocos (o tu juego) sigue usando NEON aunque ahora estés compilando para x86.

Puede ser tan simple como hacer una reconstrucción completa para asegurarse de que todos los archivos de objetos se recompilan respetando su cambio en la ABI:

ndk-build -B <your_normal_parameters>

Asegúrese también de que cualquier otro archivo Application.mk se actualiza con las nuevas ABIs.

Si esa solución rápida no funciona, yo intentaría crear un emulador x86 normal utilizando el SDK de Android y HAXM . Si sigues teniendo problemas, entonces tu problema puede ser un poco más difícil de diagnosticar dada la información que has proporcionado.

Sin embargo, creo que puedes estar dándote más trabajo del necesario.

Pide a tus amigos con un S4 que activen " Informes de errores en el menú de energía " en Ajustes / Sistema / Opciones de desarrollo. Pídeles que ejecuten tu aplicación, y después de que se cuelgue, pídeles que mantengan pulsado el botón de encendido y seleccionen "Informe de errores". Cuando haya terminado pueden enviarlo por correo electrónico, y usted tendrá la pila completa y mucha otra información que le ayudará a determinar el problema real en su S4.

Otra opción es ampliar la aplicación en su aplicación, y establezca un manejador de excepciones no capturadas . Cuando tu aplicación se bloquea debido a una excepción no capturada, puedes hacer algo con la excepción: guardar la pila en un archivo de texto en la tarjeta SD, enviarla por correo electrónico, etc. Pero si el fallo se produce en código nativo, es posible que no obtengas mucha información útil de la excepción.

HTH.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X