2014-07-03 18 views
7

Voglio utilizzare andengine nel mio progetto di Android Studio ma ho errore ndk durante la costruzione.eengine compileReleaseNdk error

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 

Suppongo che mi manchi alcuni file OpenGL?

risposta

3

compito NDK del plugin Gradle Android in realtà non utilizzare qualsiasi file Android.mk che si possono avere fornito nella JNI/cartella. Questa è stata una grande fonte di confusione per me finché non l'ho capito.

Genera un file Android.mk intermedio durante la creazione, in base ai parametri impostati nello script di build Gradle e sul contenuto della jni/cartella.

È possibile verificarlo da soli controllando l'origine per l'attività NdkCompile al numero https://android.googlesource.com/platform/tools/base/+/55aebda607efcc29b8d9d5e1a99d446e320ff288/build-system/gradle/src/main/groovy/com/android/build/gradle/tasks/NdkCompile.groovy.

Nota il metodo writeMakeFile(...) on line 126.

Questo è il motivo per cui l'errore si stanno ottenendo dal comando NDK-build che viene eseguito come parte del tuo Gradle costruire riferimento allo script di build APP_BUILD_SCRIPT=D:\Android\workspace\simpleclock\simple_clock_as\andEngine\build\intermediates\ndk\release\Android.mk, non qualcosa di simile, come si APP_BUILD_SCRIPT=D:\Android\workspace\simpleclock\simple_clock_as\andEngine\src\main\jni\Android.mk potrebbe aspettarsi e lo vorrà.

Non è possibile ottenere l'attività NDK del plug-in Android Gradle per utilizzare il proprio file Android.mk (credetemi se ce l'avessi trovato lo avrei trovato!).

avete due opzioni per ottenere il codice di NDK compilazione come parte di Gradle:

  1. Capire la corretta configurazione da mettere nel tuo build.gradle modo che il file Android.mk generato contiene la richiesta LOCAL_LDLIBS := -lGLESv2 linea e qualsiasi altra riga da https://github.com/nicolasgramlich/AndEngine/blob/GLES2/jni/Android.mk richiesta.
  2. Scrivere un'attività di compilazione NDK personalizzata che utilizza direttamente il file Android.mk di AndEnginge. Recentemente ho dovuto farlo da solo per un set di sorgenti NDK che richiede più parametri rispetto al plug-in Android Gradle che attualmente supporta il passaggio tramite Gradle, quindi se viene a questo posso fornire aiuto.

Penso che in questo caso l'opzione 1 sia aperta e quindi ovviamente la soluzione preferibile.

Qualcosa di simile a questo aggiunto al blocco defaultconfig Android dovrebbe funzionare:

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

Purtroppo Sono molto non un/esperto di codice nativo C (lo so praticamente nulla) e quindi non in grado di indovinare se AndEngine bisogno LOCAL_MODULE_FILENAME e LOCAL_EXPORT_C_INCLUDES da impostare per creare correttamente. Se lo è, è necessario procedere con l'approccio 2 (almeno fino a quando/quando l'attività Android Gradle NDK supporta la configurazione).Anche se ho appena controllato il repository git AndEngine ed eseguito correttamente ndk-build dopo averli rimossi dal suo file Android.mk, che è promettente.

(Ho trovato quali proprietà NDK possono essere parametrizzate tramite ispezione di https://android.googlesource.com/platform/tools/base/+/55aebda607efcc29b8d9d5e1a99d446e320ff288/build-system/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/NdkConfigDsl.java).

+0

Grazie per la risposta! Sfortunatamente, ci sono nuovi errori .. Se puoi aiutare, guarda il log: http://pastebin.com/4xUWP93D – rocknow

+2

Dovrebbe essere "ldLibs" GLESv2 "' invece di 'ldLibs" lGLESv2 "' – ph0b