C/C++ 작성된 프로그램을 NDK를 이용하여 안드로이드에 포팅하는 과정을 2회에 거쳐 설명드리겠습니다.
오늘은 기본적인 환경 설정에 대해서 이야기 해보겠습니다.

저는 JAVA초보라 SDK 설치 후 Hello Android 및 예제 몇개 실행시켜 보는게 전부였는데,
제가 좀 할 수 있는 C/C++ 언어로 뭔가 해낼수도 있겠다는 기대감에 NDK를 시작해 보았습니다.
JNI는 Java Native Interface의 약자로 Java와 Native object 가 상호작용하는 인터페이스 입니다.
Native는 C/C++/ASM 등등의 언어로 작성된 코드를 컴파일한 Object 결과물을 말합니다.


Windows-XP 환경 기준으로 설명 드립니다.
우선 Eclipse와 Android SDK/ADT가 설치되어 잘 동작하고 있다고 가정합니다.

아래 링크에서 windows용 NDK 1.6_R1을 받아 적당한 폴더에 풀어놓습니다.
http://developer.android.com/sdk/ndk/1.6_r1/index.html
여기서는 D:\android\android-ndk-1.6_r1-windows\android-ndk-1.6_r1\ 에 압축이 풀렸다고 가정합니다.
그리고 docs 폴더 아래에 있는 OVERVIEW.TXT 를 한번 천천히 읽어 봅니다.



이제는 cygwin을 설치해야 합니다.
NDK에 포함된 C/C++ 컴파일러(툴체인)는 원래 리눅스용이지만, Windows사용자를 위해 가상머신 보다는 훨씬 속도가 빠르고 간단한 간이 리눅스의 일종인 Cygwin을 설치해 그 위해서 동작시킵니다.

아래 링크를 열고 우측 상단 구석의 "Install Cygwin now"라는 모양을 누르면 setup.exe가 실행되면서 설치 작업을 합니다.
http://www.cygwin.com/
이때 주의할것이 두가지 정도 있습니다.
다운로드 서버를 선택할때 국내 daum을 이용하는것이 좋습니다. 다른곳은 전송 속도가 많이 느립니다.
그리고, 좀 더 주의할것은 "Select Packages" 화면에서 devel 항목의 make (The GNU version of the 'make' utility)를 꼭 추가해 주고 나머지 설치과정을 마무리 합니다.
이 게시판에 보면 예전에 회색님이 NDK1.5 기준으로 올려놓은 글이 있는데, 그 곳을 보면 gcc도 설치하라고 나와 있습니다.
그런데, NDK1.6 에서는 설치가 필요없는것 같습니다. 하지만 GNU make는 꼭 있어야 합니다.
cygwin기동후 prompt가 나오면 make -v 라고 입력하여 make 유틸이 잘 설치되었는지 확인합니다

이제 환경설정 마지막 단계입니다. 다음과 같이 입력합니다.
$ cd /cygdrive/d/android/android-ndk-1.6_r1-windows/android-ndk-1.6_r1
다음 툴체인등을 설정하는 셋업 명령을 입력합니다.
$ build/host-setup.sh



설치가 끝났으면 제대로 되었는지 확인합니다.
NDK의 가장 간단한 예제를 컴파일하고 실행시켜 봅니다. 예상대로 Hello JNI 입니다.
C언어에서 간단한 문자열을 자바로 보내고, 받은 결과를 자바가 화면에 출력시키는 예제입니다.

cygwin을 실행시키고 다음과 같이 C언어쪽을 먼저 컴파일해서 동적 라이브러리(so) 파일로 만들게 됩니다.

아래 명령으로 설치된 ndk 폴더로 이동합니다.
$ cd /cygdrive/d/android/android-ndk-1.6_r1-windows/android-ndk-1.6_r1

아래 명령으로 hello-jni를 컴파일 합니다.
$ make APP=hello-jni

컴파일이 무사히 끝났다면, apps/hello-jni/project/libs/armeabi 아래에 방금 생성된 libhello-jni.so 가 설치되었다고 표시됩니다.


이제는 Java쪽을 컴파일할 차례입니다.
Eclipse를 실행시키고, 새로운 안드로이드 프로젝트를 생성합니다.
이때 Create project from existing source를 선택하고 Location은 아래와 같아야 합니다.

D:\android\android-ndk-1.6_r1-windows\android-ndk-1.6_r1\apps\hello-jni\project

이때 Build Target은 Android 1.5로 선택합니다.

프로젝트가 잘 생성되었다면, 아래와 같이 libs/armeabi/libhello-jni.so 파일이 보여야 합니다.
hello_jni.PNG 
이렇게 프로젝트를 만들어 Build하고 실행시켜 테스트 해봅니다.
jni 폴더에 있는 hello-jni.c와 src/com/example/hellojni 폴더의 HelloJni.java의 소스코드를 잘 살펴 보시길 바랍니다.

한가지 주의하셔야 할것은 안드로이드 프로그래밍을 어느 정도는 할 줄 알아야 C언어로 작성한 라이브러리와 원활한 인터페이스가 가능하다는 것입니다. 키입력/터치입력/화면출력/소리출력등 기본적인 이벤트나 리소스 사용은 가능하면 안드로이드 플랫폼으로 돌려야 하기 때문입니다.

아래는 C언어 게임 엔진 기반의 FPS게임인 Woflenstein 3D를 오드로이드에 이식하여 플레이하는 사진입니다.
서든어택의 할아버지격인 고전 게임입니다. 다음에는 이 게임의 소스 코드를 공개하고 그 이식 과정을 설명드리겠습니다.
s_IMG_1943.JPG s_IMG_1947.JPG

끝으로 Apress 출판사에서 나온 "Pro Android Games - Vladimir Silva 저" 책을 참고하였음을 밝힙니다.