저번 달(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>
r4에 ndk-build라는 새 명령이 도입되긴 했지만 기존의 make APP= 도 여전히 작동합니다. 유일한 차이는 NDK r4의 루트 디렉터리(이하 <ndk-r4> 디렉터리)에 apps라는 디렉터리가 미리 만들어져 있지 않다는 것 뿐입니다.
<ndk-r4> 디렉터리에 apps라는 하위 디렉터리를 직접 만든 후 부록 A와 B에 나온 절차를 그대로 적용하면 됩니다. 부록 A와 B를 이미 따라한 독자라면 NDK r3의 apps 디렉터리를 그냥 통채로 <ndk-r4>에 복사해도 되겠고요.
(이 글 끝의 "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는 현재 디렉터리(또는 -C 옵션으로 지정된 디렉터리)에서 AndroidManifest.xml를 찾습니다. 그 파일이 있으면 현재 디렉터리를 유효한 안드로이드 프로젝트 디렉터리라고 간주하고, 그 디렉터리의 jni 디렉터리로 들어가서 거기에 있는 Android.mk에 의거해서 빌드를 진행합니다(GNU make로). 그것 뿐입니다.
위의 과정에서 보듯이, r3까지 쓰이던 Application.mk는 이제 필요가 없습니다. 물론 NDK 루트에서 make APP= 를 실행하는 방식을 사용하려면 여전히 Application.mk가(그리고 apps 디렉터리가) 필요합니다.
이 정도만 알면 코드의 실질적인 오류, 즉 컴파일 오류나 링크 오류 이전의 사소한 문제점들은 충분히 해결할 수 있을 것입니다.