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?
- Android aar dependencias
- Android Crosswalk Lite - Integración con Android Studio
- Compilar, Proporcionado, APK - Android dependencia alcance
- Android Studio y error de 9 parches
- Android studio sdk versión 22 excepción durante la renderización: action_bar
- Android Studio, 9 Patch y el botón "Show Bad Patches". ¿Cómo lo sabe?
- ¿Qué codificación debo utilizar para mi proyecto de Android Studio?
- Gradle (Android Studio) no compilará 9patches
- Error al crear aplicaciones Android con Jenkins y Gradle en la plataforma linux centos
- Problema resolver gradle dependencia en el estudio de Android?
- ProGuard no funciona con okhttp
- Cómo corregir los errores de Gradle Sync al configurar el nuevo React-Native Project para Android e iOS
- Error: No se pudo abrir el archivo zip. El caché de dependencias de Gradle puede estar dañado
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:
- 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. - 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 = [] } }
- Su APP_BUILD_SCRIPT apunta a un archivo desconocido: C: \ android-ndk / jni /Android.mk
- ¿Cómo desplazarse automáticamente al campo de entrada en Android cuando el teclado virtual se superpone al mostrar?