2011-03-14 2 views
8

이제 Openroid ES를 Android에서 배우기 시작했습니다. (this book 사용) source 코드를 5 장에서 채택하여 안드로이드에서 jni를 사용하는 기존 방법에 대해 설명했습니다. 단순히 기본 GL 응용 프로그램을 실행하는 것에 대한 우려). .so lib 디렉토리를 얻고 .apk 아카이브에서 더 많이 사용하기 위해 원시 코드를 컴파일하려고합니다. 그러나 특정 libs (GLES/gl.h, EGL/egl.h, GLES/gl.h, GLES/glext.h)가없는 경우 컴파일이 불가능합니다.OpenGL ES를 설치하고 android 용 코드를 컴파일

그래서 libs (AFAIU, OpenGL ES 및 EGL 설치)를 설치하고 가장 간단한 네이티브 코드를 컴파일하려면 어떻게해야합니까? (자습서는 매우 존경 받는다).

미리 감사드립니다.

편집 : 제안 된 (약간 변경된 .mk 파일) 예제와 마찬가지로 시도했지만 성공하지 못했습니다.

#include <unistd.h> 
#include <stdlib.h> 
#include <stdio.h> 

#include <GLES/gl.h> 

#define FIXED_ONE 0x10000 
#define one 1.0f 

typedef unsigned char byte; 

extern void jni_printf(char *format, ...); 

// Cube static 
GLfloat vertices[24] = {  -one, -one, -one,  one, -one, 
-one,  one, one, -one,  -one, one, -one,  -one, -one, one,  one, -one, one,  one, one, one,  -one, one, one, }; 

static GLfloat colors[] = {   0, 0, 0, one,  one, 0, 0, one,  one, one, 0, one,  0, one, 0> , one,  0, 0, one, one,  one, 0, one, one,   one, one, one, one,  0, one, one, one, }; 

static byte indices[] = {  0, 4, 5, 0, 5, 1,   1, 5, 6, 1, 6, 2,  2, 6, 7, 2, 7, 3,  3, 7, 4, 3, 4, 0,  4, 7, 6, 4, 6, 5,  3, 0, 1, 3, 1, 2 }; 


void Cube_draw() { 
glFrontFace(GL_CW); 
glVertexPointer(3, GL_FLOAT, 0, vertices); 
glColorPointer(4, GL_FLOAT, 0 , colors); 
glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_BYTE, indices); } 

그것은 굉장히 사소한 아직 작동하지 :

여기

ndk-build

Compile thumb: egl <= cube.c

/path/jni/cube.c:5:21: error: GLES/gl.h: No such file or directory // same message for glbuffer when gl.h is being included

가 cube.c 코드 : 컴파일러는 이전과 나에게 같은 결과를 제공합니다.

Android.mk :

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_LDLIBS := -lGLESv1_CM.so 
LOCAL_MODULE := egl 
LOCAL_SRC_FILES := cube.c cuberenderer.c 

include $(BUILD_SHARED_LIBRARY) 
+0

나는 그 책을 통해 flicked하고 그것은 네이티브 코드를 사용하여 날 내려 놨어. 시험해 보려 할 때 샘플 소스를 살펴보고 샘플 .mk 파일을 가져 와서 몇 가지 이름을 바꿨다. 이 책은 아무 이유없이 어리석게 복잡합니까? 아니면 최신 NDK가 출시되기 전에 그렇게해야합니까? –

+0

@ 폴디, 복잡한 것은 아니며, 단지 두 번 수정해야합니다. 그보다 조금 구식이 아니기 때문에 빠른 학습을 위해 많은 정보가 필요하다는 것을 알기는하지만 유용합니다. 예제는 변경 사항과 함께 잘 작동하지만 GL에 왔을 때 컴파일 할 수 없습니다. 자바 부분이 잘 작동합니다. –

답변

17

그 라이브러리는 안드로이드 자체에 의해 제공됩니다. 그러나 프로젝트를 찾아서 JNI (네이티브) 코드를 올바로 컴파일하도록 설정하는 것은 매우 어려울 수 있습니다.

GLSurfaceView을 입력하고 적절한 Android 라이브러리를 설정하기 위해 glbuffer을 시작 프로젝트로 사용하는 것이 좋습니다.

안드로이드 라이브러리에 연결하는 방법에 대한 자세한 내용은 처음부터 직접 시도하고 싶다면 그 프로젝트 안에 jni/Android.mk에 있습니다.

수정 - 분명히 glbuffer가 누락되었습니다. jni/Application.mk.

APP_ABI := armeabi armeabi-v7a 
APP_PLATFORM := android-8 

는 그 다음 NDK 알 수

이 포함의 안드로이드-8 플랫폼 내부에 보는이 내부를 만들고 넣어. 필요에 따라 다른 버전으로 변경할 수 있습니다.

+0

수정 된 질문을 참조하십시오. –

+0

나는 그 메시지도 조사 중이다. ... –

+0

나는 나의 추가 된 지시로 성공적으로 NDT를 구축 할 수있다. –

3

난 그냥 cube.c

(*g_VM)->AttachCurrentThread (g_VM, (void **) &env, NULL); 

(*g_VM)->AttachCurrentThread (g_VM, (const struct JNINativeInterface ***) &env, NULL); 

에 변경 & cuberenderer.c

#include <jni.h> 

을 추가 내 Android.mk :

LOCAL_PATH:= $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := libgltest_jni 
LOCAL_CFLAGS := -Werror 
LOCAL_SRC_FILES := cube.c cuberenderer.c 
LOCAL_LDLIBS := -llog 
-lGLESv1_CM 

include $(BUILD_SHARED_LIBRARY) 

내 응용 프로그램.MK :

# The ARMv7 is significanly faster due to the use of the hardware FPU 
APP_ABI := armeabi armeabi-v7a 
APP_PLATFORM := android-9 

는 그리고는 "EGL/egl.h"헤더 파일의 인스턴스의 NDK를 검색 안드로이드 NDK-R6

5

에 그것을 만들었습니다. 이 특정 예는 Android API 레벨 15에서 컴파일되고 실행되지만 다른 API 레벨에는 헤더가 없습니다.

+0

컴파일하는 방법을 찾고이 질문에 도착 내 문제를 해결' EGL/egl.h'안드로이드 헤더. 이것은 나를 위해 일했다. 'APP_PLATFORM = android-14'를 사용하여 컴파일 – asloob

-2

파일 이름 GLES/glext.h를 두 번 사용했습니다.

관련 문제