Andengine compileReleaseNdk error

Quiero usar andengine en mi proyecto de estudio de Android, pero tengo ndk error al construir.

Error:Execution failed for task ':andEngine:compileReleaseNdk'. > com.android.ide.common.internal.LoggedErrorException: Failed to run command: D:\Android\android-ndk-r9d\ndk-build.cmd NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=D:\Android\workspace\simpleclock\simple_clock_as\andEngine\build\intermediates\ndk\release\Android.mk APP_PLATFORM=android-19 NDK_OUT=D:\Android\workspace\simpleclock\simple_clock_as\andEngine\build\intermediates\ndk\release\obj NDK_LIBS_OUT=D:\Android\workspace\simpleclock\simple_clock_as\andEngine\build\intermediates\ndk\release\lib APP_ABI=all Error Code: 2 Output: D:/Android/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: D:\Android\workspace\simpleclock\simple_clock_as\andEngine\build\intermediates\ndk\release\obj/local/armeabi-v7a/objs/andengine_shared/D_\Android\workspace\simpleclock\simple_clock_as\andEngine\src\main\jni\src\GLES20Fix.o: in function Java_org_andengine_opengl_GLES20Fix_glVertexAttribPointer:GLES20Fix.c(.text.Java_org_andengine_opengl_GLES20Fix_glVertexAttribPointer+0x40): error: undefined reference to 'glVertexAttribPointer' D:/Android/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: D:\Android\workspace\simpleclock\simple_clock_as\andEngine\build\intermediates\ndk\release\obj/local/armeabi-v7a/objs/andengine_shared/D_\Android\workspace\simpleclock\simple_clock_as\andEngine\src\main\jni\src\GLES20Fix.o: in function Java_org_andengine_opengl_GLES20Fix_glDrawElements:GLES20Fix.c(.text.Java_org_andengine_opengl_GLES20Fix_glDrawElements+0x30): error: undefined reference to 'glDrawElements' collect2: ld returned 1 exit status make.exe: *** [D:\Android\workspace\simpleclock\simple_clock_as\andEngine\build\intermediates\ndk\release\obj/local/armeabi-v7a/libandengine_shared.so] Error 1 

Supongo que me falta algunos archivos de OpenGL?

La tarea NDK del complemento de Android Gradle no utiliza ningún archivo de Android.mk que pueda haber proporcionado en su carpeta jni /. Esto fue una gran fuente de confusión para mí hasta que me di cuenta de que.

Genera un archivo intermedio de Android.mk durante la compilación, basado en los parámetros que ha establecido en su script de compilación de Gradle y en el contenido de su carpeta jni /.

Puede ver esto por sí mismo inspeccionando el origen de su tarea NdkCompile en https://android.googlesource.com/platform/tools/base/+/55aebda607efcc29b8d9d5e1a99d446e320ff288/build-system/gradle/src/main/groovy/com/android /build/gradle/tasks/NdkCompile.groovy .

Tenga en cuenta el writeMakeFile(...) en la línea 126.

Es por esto que el error que está recibiendo del comando ndk-build que se ejecuta como parte de su compilación de Gradle hace referencia al script de compilación APP_BUILD_SCRIPT=D:\Android\workspace\simpleclock\simple_clock_as\andEngine\build\intermediates\ndk\release\Android.mk , no algo como APP_BUILD_SCRIPT=D:\Android\workspace\simpleclock\simple_clock_as\andEngine\src\main\jni\Android.mk como se puede esperar y lo desea.

No hay manera de conseguir que la tarea NDK del complemento de Android Gradle utilice su propio archivo Android.mk (créanme si lo hubiera encontrado!).

Tiene dos opciones para obtener su compilación de código NDK como parte de Gradle:

  1. Descubrir la configuración correcta para poner en su build.gradle para que el archivo Android.mk generado contenga la línea LOCAL_LDLIBS := -lGLESv2 y cualquiera de las otras líneas de https://github.com/nicolasgramlich/AndEngine/blob/ GLES2 / jni / Android.mk que se requieren.
  2. Escriba una tarea de compilación NDK personalizada que utilice el archivo Android.mk de AndEnginge directamente. Recientemente he tenido que hacer esto por mí mismo para un conjunto de fuentes NDK que requiere más parámetros que el complemento de Android Gradle actualmente soporta pasar a través de Gradle, por lo que si llega a esto puedo proporcionar ayuda.

Creo que en este caso la opción 1 está abierta y por supuesto, la solución preferible.

Algo como esto añadido al bloque androide defaultConfig debería funcionar:

 android { defaultConfig { ndk { moduleName "myNDKModule" stl "stlport_shared" ldLibs "lGLESv2" cFlags "-Werror" } } } 

Desafortunadamente no soy un C / experto en código nativo (no sé prácticamente nada) así que no puedo adivinar si AndEngine necesita LOCAL_MODULE_FILENAME y LOCAL_EXPORT_C_INCLUDES para establecer correctamente. Si lo hace, tendrá que ir con la aproximación 2 (al menos hasta si / cuando la tarea de Android Gradle NDK admite la configuración). Aunque acabo de comprobar el reporte de git de AndEngine y ejecutar con éxito ndk-build después de haberlos eliminado de su archivo Android.mk, lo cual es prometedor.

(He encontrado que las propiedades de NDK pueden parametrizarse a través de la inspección de https://android.googlesource.com/platform/tools/base/+/55aebda607efcc29b8d9d5e1a99d446e320ff288/build-system/gradle/src/main/groovy/com/android/build/ Gradle / internal / dsl / NdkConfigDsl.java ).

Android.mk en realidad incluye la línea?

https://github.com/nicolasgramlich/AndEngine/blob/GLES2/jni/Android.mk#L10

 LOCAL_LDLIBS := -lGLESv2 

Estos errores lo indican.

 error: undefined reference to 'glVertexAttribPointer' error: undefined reference to 'glDrawElements' 

Tuve un problema similar y este video https://www.youtube.com/watch?v=0-rYK2oh8oo me ayudó a solucionar los problemas de compilación. Básicamente, es necesario descargar (y extraer) NDK desde aquí: http://developer.android.com/ndk/downloads/index.html y especificar la ubicación NDK en la configuración del módulo. Además, debe modificar el archivo build.gradle de andEngine para incluir

  sourceSets{ main{ jni.srcDirs = [] } } 
  • Butterknife Nullpointer excepción en Android 4.2
  • ¿Cómo puedo establecer SignalR en Android Studio para ignorar los problemas de SSL para el desarrollo
  • Android Studio Excluir clase de construir?
  • ¿Qué es Gradle en Android Studio?
  • Cordova default config.xml URI no está registrado
  • Android Studio: ButterKnife 6.1.0 Duplicate Class: $$ Ver Inyector
  • "Proporcionado" el alcance no funciona - estudio androide con gradle
  • AndroidStudio disable "Recurso esperado de tipo string"
  • Android Studio: Integrating Butterknife?
  • Módulo de importación al proyecto gradle en android studio 0.4.0v
  • Errores de compilación de androidtv-Leanback-master
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.