Android: Calling System.loadLibrary () hace que el proceso muera

He decidido llevar a portar un juego, que utiliza las bibliotecas SDL y hace un uso intensivo de C + + y la STL, a Android. He tenido éxito en obtener todas las bibliotecas necesarias compiladas, así como todos los archivos de origen para el juego. Mi problema es que cuando llamo System.loadLibrary () para cargar el. Así que para el juego, la aplicación se bloquea inmediatamente con "Proceso org.libsdl.app (pid 3569) ha muerto."

Esta es la sección de código donde carga todas las bibliotecas necesarias y el juego como una biblioteca compartida.

static { // Load the required libraries for the game System.loadLibrary("SDL"); System.loadLibrary("SDL_image"); System.loadLibrary("SDL_mixer"); System.loadLibrary("SDL_net"); // load the game as a shared library System.loadLibrary("smw_jni"); // << process dies when this is called } 

Libswm_jni.so se compiló con el Android NDK y en el archivo Applicaion.mk que especificé

 APP_STL := gnustl_static 

Dado que se bloquea inmediatamente después de System.loadLibrary ("smw_jni") sin mensajes de error significativos, estoy en una pérdida en cuanto a cómo ir sobre cómo llegar a la causa raíz.

He trabajado en portar otro juego que era simplemente código C antiguo, que funcionó, así que no estoy seguro de si hay un problema con el hecho de que este juego en particular es pesado en el lado de C + +.

Gracias de antemano por cualquier ayuda con este dolor de cabeza de la mía!

-clark-

2 Solutions collect form web for “Android: Calling System.loadLibrary () hace que el proceso muera”

Después de sacarme el pelo con este, finalmente me di cuenta del problema. Resulta que una de las clases estaba realizando algún archivo IO en archivos que no existían. En caso de que alguien más encuentre un problema con la carga de una biblioteca compartida, aquí es lo que hice para calcular esto.

Habilité un punto de interrupción en la llamada a System.loadLibrary () y cuando la ejecución se detuvo en este punto de interrupción, utilicé stacktrace para obtener alguna información adicional que no se proporcionaba en logcat.

Dado que había un poco de información que tenía stacktrace canalizado a un archivo para poder analizarlo. Aquí está el comando que usé

 # adb shell strace -p pid > strace.log 

Espero que esto ayude a cualquiera que se encuentre con un dolor similar en el problema de culo.

-clark-

Sólo necesita llamar a loadLibaray() en la biblioteca que realmente expone una interfaz JNI. El sistema debe hacerse cargo de cargar cualquier biblioteca dependiente, así que no creo que necesites cargar SDL_ *. ¿Qué dice el logcat?

  • Cómo escribir y leer bytebuffer pasar de java a jni
  • Módulos no definidos al cambiar a una versión más reciente de android ndk
  • JNA para android
  • Pasar el puntero de C a Java se convierte en NULL
  • Firma de android apk con gradle-experimental: 0.2.0
  • JNI CALL cambia el parámetro jclass o cómo obtener un jobject desde un parámetro jclass
  • ¿Qué es JNI Graphics o cómo usarlo?
  • Android JNI APK Embalaje
  • CheckJNI de Android: ¿Cómo apagarlo / encender (en un emulador)? La documentación parece estar defectuosa
  • Javah Error android.app.Activity not found
  • Llamar a DeleteLocalRef en la interfaz nativa de java
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.