¿Cómo puedo solucionar esta excepción fatal?

Estoy portando mi código C / C ++ en un juego de Android usando el NDK, pero estoy teniendo problemas para empezar.

He descargado el NDK-r5b de developer.android.com y he instalado Cygwin.

Ni siquiera soy capaz de ejecutar el programa Hello-jni proporcionado dentro de las muestras NDK.

Cuando corro:

 $ cd /cygdrive/c/android/android-ndk-r5b/samples/hello-jni $ ndk-build 

Consigo un ERROR: You are using a non-Cygwin compatible Make program .

Intenté instalar GNUMake 3.81 pero el problema persiste.


He intentado ejecutar el programa de ejemplo HELLO-JNI en el NDK a través de Eclipse IDE. Hay una fuerza cerca en el Android AVD, y logcat estaba mostrando una excepción de la siguiente manera:

 04-08 12:32:11.609: ERROR/AndroidRuntime(274): FATAL EXCEPTION: main 04-08 12:32:11.609: ERROR/AndroidRuntime(274): java.lang.ExceptionInInitializerError 04-08 12:32:11.609: ERROR/AndroidRuntime(274): at java.lang.Class.newInstanceImpl(Native Method) 04-08 12:32:11.609: ERROR/AndroidRuntime(274): at java.lang.Class.newInstance(Class.java:1429) 04-08 12:32:11.609: ERROR/AndroidRuntime(274): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 04-08 12:32:11.609: ERROR/AndroidRuntime(274): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 2577) 04-08 12:32:11.609: ERROR/AndroidRuntime(274): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 2679) 04-08 12:32:11.609: ERROR/AndroidRuntime(274): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 04-08 12:32:11.609: ERROR/AndroidRuntime(274): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 04-08 12:32:11.609: ERROR/AndroidRuntime(274): at android.os.Handler.dispatchMessage(Handler.java:99) 04-08 12:32:11.609: ERROR/AndroidRuntime(274): at android.os.Looper.loop(Looper.java:123) 04-08 12:32:11.609: ERROR/AndroidRuntime(274): at android.app.ActivityThread.main(ActivityThread.java:4627) 04-08 12:32:11.609: ERROR/AndroidRuntime(274): at java.lang.reflect.Method.invokeNative(Native Method) 04-08 12:32:11.609: ERROR/AndroidRuntime(274): at java.lang.reflect.Method.invoke(Method.java:521) 04-08 12:32:11.609: ERROR/AndroidRuntime(274): at com.android.internal.os.ZygoteInit $MethodAndArgsCaller.run(ZygoteInit.java:868) 04-08 12:32:11.609: ERROR/AndroidRuntime(274): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 04-08 12:32:11.609: ERROR/AndroidRuntime(274): at dalvik.system.NativeStart.main(Native Method) 04-08 12:32:11.609: ERROR/AndroidRuntime(274): Caused by: java.lang.UnsatisfiedLinkError: Library hello-jni not found 04-08 12:32:11.609: ERROR/AndroidRuntime(274): at java.lang.Runtime.loadLibrary(Runtime.java:461) 04-08 12:32:11.609: ERROR/AndroidRuntime(274): at java.lang.System.loadLibrary(System.java:557) 04-08 12:32:11.609: ERROR/AndroidRuntime(274): at com.example.hellojni.HelloJni.<clinit>(HelloJni.java:67) 04-08 12:32:11.609: ERROR/AndroidRuntime(274): ... 15 more 04-08 12:32:11.678: WARN/ActivityManager(59): Force finishing activity com.example.hellojni/.HelloJni 04-08 12:32:12.340: WARN/ActivityManager(59): Activity pause timeout for HistoryRecord{44f925c8 com.example.hellojni/.HelloJni} 

¿Cómo puedo hacer que esto funcione?

Tuve este mismo problema y me di cuenta. La cosa que lo estaba haciendo estropear para mí estaba en Propiedades del Proyecto -> C / C ++ Build -> Comando de construcción: se estableció en 'bash ndk-build' en lugar de 'bash C: \ android-ndk-r6 \ ndk- construir'

Tuve este problema. Resultó que la cadena de herramientas GNU no se instaló cuando instalé Cygwin, y que se estaba recogiendo desde otro SDK instalado en mi máquina de compilación. La solución era reinstalar Cygwin y comprobar que las herramientas Gnu estaban instaladas. (Creo que el encabezado es 'Devel' en la configuración de Cygwin. El valor predeterminado no es instalar, cambiar a 'instalar'). HTH

Abordé esto en Eclipse haciendo lo siguiente:

  1. Haga clic derecho en el nombre del proyecto y elija "propiedades"
  2. En "C / C ++ Build", elija "sección del constructor" y luego en el grupo "constructor", coloque lo siguiente en el cuadro de texto "build command":

    Bash "_cygwin_home_ \ home \ android-ndk-r6b \ ndk-build"

    • Reemplazar "_cygwin_home_" con su ruta real a cygwin,
    • Coloco la carpeta ndk dentro de la carpeta de inicio en la carpeta de instalación de cygwin (como se puede ver).

Espero que esto te ayude.

  • Compilación de OpenCV en Android NDK
  • Compila OpenSSL 1.1.0 para Android
  • Cygwin para la programación Android-NDK
  • Configuración de la variable Cygwin Path para encontrar Android NDK
  • Android NDK: ADVERTENCIA: APP_PLATFORM android-9 es más grande que android: minSdkVersion 8
  • No se encuentra la ruta de compilación de Android NDK
  • Problemas específicos de Ndk-cygwin path
  • Creación de Android NDK Toolchain para x86 Android en Windows mediante Cygwin
  • No se pueden incluir archivos de encabezado STL con Android NDK r5
  • ¿Puedo utilizar las librerías de FFmpeg en una aplicación de Android?
  • Uso no válido de tipo incompleto en android ndk utilizando c ++ 11 std :: async
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.