안드로이드 NDK r4로 "프로 안드로이드 게임 개발" 예제 빌드하기

류광, 2010/06/06 17:20
얼마 전 나온 NDK r4로 "프로 안드로이드 게임 개발" 예제들을 빌드하는 방법을 설명하고, 새로운 ndk-build 명령도 간단하게 소개합니다.

저번 달(2010년 5월)에 NDK r4가 나왔습니다.

http://developer.android.com/sdk/ndk/index.html

주목할만한 변화는 ndk-build라는 빌드 명령이 추가된 것인데요. 이제는 NDK 루트 이외의 디렉터리에서, 특히 개별 프로젝트 디렉터리 자체에서 네이티브 코드를 빌드할 수 있게 되었습니다.

프로 안드로이드 게임 개발의 예제들을 NDK r4로 빌드하는 방법을 간단하게만 정리해 보겠습니다.

우선 해야 할 일: 제5장 OpenGL 예제의 cuberenderer.c에 오류가 하나 있는데 ndk 1.6이나 r3에서는 그냥 경고로 넘어갔지만 r4에서는 오류로 간주되어서 컴파일이 실패합니다.

jni/cuberenderer.c 의 24행

#include <EGL/egl.h>

을 삭제하거나 다음처럼 주석으로 처리하면 됩니다.

//#include <EGL/egl.h>

기존 make APP= 방법을 그대로 사용

r4에 ndk-build라는 새 명령이 도입되긴 했지만 기존의 make APP= 도 여전히 작동합니다. 유일한 차이는 NDK r4의 루트 디렉터리(이하 <ndk-r4> 디렉터리)에 apps라는 디렉터리가 미리 만들어져 있지 않다는 것 뿐입니다.

<ndk-r4> 디렉터리에 apps라는 하위 디렉터리를 직접 만든 후 부록 A와 B에 나온 절차를 그대로 적용하면 됩니다. 부록 A와 B를 이미 따라한 독자라면 NDK r3의 apps 디렉터리를 그냥 통채로 <ndk-r4>에 복사해도 되겠고요.

새로운 ndk-build 사용

(이 글 끝의 "ndk-build에 대해 좀 더"를 먼저 읽으셔도 좋습니다.)

부록 A, B를 아직 따라하지 않은 독자라면 make APP= 를 실행하기 직전 단계까지 따라하세요. apps 폴더에 프로젝트를 복사할 필요는 없습니다.

그리고 Cygwin에서 nkd-build 명령을 어디에서나 실행할 수 있게 설정해 두어야 합니다(export PATH= 등)

이제 Cygwin 셸에서 프로젝트 디렉터리(보통의 경우 AndroidManifest.xml 파일과 jni 하위 디렉터리가 있는 디렉터리)로 가서 그냥

$ ndk-build

를 실행하면 됩니다.

다음처럼 특정 디렉터리를 직접 지정하는 것도 가능합니다.

$ ndk-build -C $WORKSPACE/wolf3d

ndk-build에 대해 좀 더

ndk-build는 현재 디렉터리(또는 -C 옵션으로 지정된 디렉터리)에서 AndroidManifest.xml를 찾습니다. 그 파일이 있으면 현재 디렉터리를 유효한 안드로이드 프로젝트 디렉터리라고 간주하고, 그 디렉터리의 jni 디렉터리로 들어가서 거기에 있는 Android.mk에 의거해서 빌드를 진행합니다(GNU make로). 그것 뿐입니다.

위의 과정에서 보듯이, r3까지 쓰이던 Application.mk는 이제 필요가 없습니다. 물론 NDK 루트에서 make APP= 를 실행하는 방식을 사용하려면 여전히 Application.mk가(그리고 apps 디렉터리가) 필요합니다.

이 정도만 알면 코드의 실질적인 오류, 즉 컴파일 오류나 링크 오류 이전의 사소한 문제점들은 충분히 해결할 수 있을 것입니다.

top
트랙백 1 : 의견 # + 2

Trackback Address :: http://occamsrazr.net/tt/trackback/231

  1. Tracked from Jong10 in Wonderland 2010/06/08 16:41 DELETE

    Subject: Rosetta를 소개합니다.

    안드로이드 NDK를 이용하면 JNI가 가능하긴 하지만, 불편한 것이 한두가지가 아니다. 특히, JNI를 위한 껍데기 코드를 짜는 것에 굉장히 많은 시간이 낭비된다. 그래서, SWIG(Simplified Wrapper and Interface Generator) 같은 대안이 있긴 하지만, SWIG의 C++ to Java, Java to C++ 생성기는 enum을 사용하는데, 안드로이드 개발 가이드라인에서는, 성능 문제로 enum을 사용하지 말라고 권고..
comments powered by Disqus

(2013년 11월 10일자로 블로그에도 DISQUS 시스템을 도입했습니다. 기존 의견의 수정, 삭제, 댓글 추가는 여전히 가능합니다.)

  1. 배썬 2012/01/10 11:32 PERMALINKMODIFY/DELETE REPLY

    와 책에 나온 예제 가 빌드 안되서 슬퍼 하고 있었는데 고맙습니다. 잘 돌아가네요 ㅎㅎ

  2. 류광 2012/01/11 18:52 PERMALINKMODIFY/DELETE REPLY

    다행입니다 :)