지난글에서 만들었던 libirrlicht.a를 이용해서 안드로이드 irrlicht 프로젝트를 만드는 과정을 정리한다.
0. 먼저 이클립스에서 Android 프로젝트를 하나 생성한다. 이름같은건 적당히 지어주고, 사용 SDK 버전은 8이상으로 해줘야 한다(irrlicht 빌드할때 사용한 버전과 맞추는게 좋다)
1. 지난글에서 사용했던 프로젝트를 재활용할 것이다.(새로 예제 만들긴 귀찮...;;;) 다음 소스들을 프로젝트 폴더로 복사해온다. 복사할때는 그냥 탐색기로 해당 폴더로 이동한 다음 드래그&드롭으로 이클립스 프로젝트에 떨구고 대화상자에서 copy를 선택하면 된다.
. irrlicht 폴더의 include 폴더를 복사해온다.
. jni폴더를 생성하고 irrlicht/jni 폴더안의 다음 파일들을 복사해온다.
- android-activity.cpp
: JNI 함수 이름들을 변경해야 한다. 정석대로라면 javah로 생성하는게 맞는거겠지만.. 그냥 find&replace로 바꿔버리겠다.
함수이름의 앞부분이 "Java_com_ellismarkov_irrlicht_" 이런식으로 되있을텐데 본인이 생성한 프로젝트의 패키지 이름으로 변경하면 된다. 예를들어 패키지 이름이 kr.newbie.irrlichtTest 라면
Java_kr_newbie_irrlichtTest_ 라고 변경하면 된다.
nativeInitGL 함수에서 createDevice 함수를 호출하는 부분을 보면 irrlicht 엔진을 OpenGL ES2로 생성하게 되어있는데 ES1으로 바꾸자(irrlicht를 ES1으로만 컴파일 해놔서리... ㅡㅅㅡ;;)
- android-receiver.cpp
- android-receiver.h
- app-android.cpp
: app-android.cpp 파일의 앞부분에서 다음 네 라인을 찾아서 주석처리하고,
#include <android-logger.h>
#include <importgl.h>
#include <os.h>
using namespace os;
line. 161의
Printer::Logger = new CAndroidLogger();
이 부분도 주석처리한다.
. src 폴더에 IrrlichtGLView.java, IrrlichtTest.java, Utils.java 파일을 복사해온다.
2. src 폴더에 java 파일들을 복사해넣으면 아마 에러가 뜰 것이다. 소스 제일 앞부분의 package를 새로 만든 프로젝트의 패키지 이름과 맞춰준다. 패키지 이름을 잊었다면 AndroidManifest.xml 파일을 참고.
3. 새로생성된 프로젝트의 액티비티는 사용하지 않을 것인다. AndroidManifest.xml 파일을 열어서
<activity android:name=".IrrlichtTestActivity"
android:label="@string/app_name">
android:name <- 이부분의 값을 .IrrlichtTest로 바꾸자.
4. irrlicht/obj/local.armeabi 폴더에 가면 libirrlicht.a 파일이 있다. jni 폴더로 복사해온다.
5. 중요한걸 하나 뻬먹었다. irrlicht/jni폴더의 Android.mk 파일도 복사해온다. ㅋㅋ;
그리고 Android.mk 파일을 다음과 같이 수정한다.
#
# COSOperator.cpp was removed from IRROTHEROBJ
LOCAL_PATH := $(call my-dir)
#
# 1. Load Static library (.a)
#
include $(CLEAR_VARS)
LOCAL_MODULE := static_irrlicht
LOCAL_SRC_FILES = ./libirrlicht.a
include $(PREBUILT_STATIC_LIBRARY)
#
# 2. Build Shared library (.so)
#
include $(CLEAR_VARS)
LOCAL_STATIC_LIBRARIES := static_irrlicht
ANDROID = android-activity.cpp android-receiver.cpp app-android.cpp
LOCAL_MODULE := irrlicht
LOCAL_ARM_MODE := arm
LOCAL_CFLAGS := -O3 -DANDROID_NDK -I./../include/
LOCAL_SRC_FILES := $(ANDROID)
LOCAL_LDLIBS := -ldl -llog -lGLESv1_CM -lGLESv2
include $(BUILD_SHARED_LIBRARY)
6. cygwin 에서 jni 폴더로 이동한 다음에 ndk-build 커맨드를 실행한다.
7. 이클립스 패키지 익스플로러를 새로고침하면 obj 폴더가 추가된것이 보일것이다. F11키를 눌러서 Debug Run을 실행시키면 짜잔~! 열심히 뛰고 있는 시드니가 보인다 ^0^/