안드로이드에서 C/C++ 코드로 된 모듈을 불러오기 위해서는 NDK (Native Development Kit) 를 이용해야만 합니다. 어떻게 설정해서 개발해야 하는지 간단히 알아봅니다.
먼저, 제 개발환경
- OS: Windows 7
- Eclipse: Eclipse IDE for Java Developer Indigo
1. Eclipse 에 C++ Development Tools 설치
Help > Install New Software > Choose “Indigo” as the update site > Select “Programming Language” Branch > Check “Eclipse C/C++ Development Tools
2. Cygwin 설치
http://www.cygwin.com 에 접속하여 setup.exe를 다운받음 > 인터넷으로 설치 선택 > 가까운 mirror 사이트 선택 > Devel 섹션에 있는 것은 Default 로 하지 말고 모두 설치 합니다.
* 주의 설치 경로에 빈칸이 있으면 안됩니다.
설치를 마치고 나서 Cygwin Terminal 을 띄우고, $make -v 를 입력시 아래처럼 나오면 성공입니다.
4 |
Built for i686-pc-cygwin |
5 |
Copyright (C) 2010 Free Software Foundation, Inc. |
7 |
This is free software: you are free to change and redistribute it. |
8 |
There is NO WARRANTY, to the extent permitted by law. |
3. 안드로이드 NDK 설치
안드로이드 NDK 공식 웹사이트에서 다운로드 후(압축파일임) 적당한 디렉토리에 압축을 풉니다. 제가 설치한 버전은 android-ndk-r7b 입니다.
4. 안드로이드 프로젝트 생성
이클립스 실행 > New Project > Android > Android Project 선택 > 프로젝트이름에 HelloNDK 라고 지어줌 > 빌드타겟 선택 > 패키지 이름은 sample.helloNDK라고 정해주면 자동으로 Activity 이름이 HelloNDKActivity 라고 셋팅됨 >
5. 코딩
Hello NDK 프로젝트 폴더 밑에 jni 라는 폴더 만들어줌 > jni 폴더 밑에 Android.mk 파일과 csource.c 파일 이렇게 두개 만들어 줍니다.
Android.mk 파일 내용
1 |
LOCAL_PATH := $(call my-dir) |
5 |
# Here we give our module name and source file(s) |
6 |
LOCAL_MODULE := csource |
7 |
LOCAL_SRC_FILES := csource.c |
9 |
include $(BUILD_SHARED_LIBRARY) |
csource.c 파일 내용
4 |
jstring Java_sample_helloNDK_HelloNDKActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) { |
5 |
return (*env)->NewStringUTF(env, "Hello from C Code!" ); |
HelloNDKActivity.java 파일 내용.
01 |
package sample.helloNDK; |
03 |
import android.app.Activity; |
04 |
import android.app.AlertDialog; |
05 |
import android.os.Bundle; |
07 |
public class HelloNDKActivity extends Activity { |
10 |
System.loadLibrary( "csource" ); |
14 |
private native String invokeNativeFunction(); |
17 |
public void onCreate(Bundle savedInstanceState) { |
18 |
super .onCreate(savedInstanceState); |
19 |
setContentView(R.layout.main); |
22 |
String hello = invokeNativeFunction(); |
23 |
new AlertDialog.Builder( this ).setMessage(hello).show(); |
6. csource.c 파일 빌드
먼저 참고로 제 HelloNDK 프로젝트 경로는 아래와 같고
1 |
$/cygdrive/c/Users/John/workspace/HelloNDK\ |
제 ndk-build 파일의 위치는 아래와 같습니다.
1 |
$/cygdrive/d/Dev/Android/android-ndk-r7b/ndk-build |
1) cygwin 에서 HelloNDK 프로젝트 파일 위치로 이동합니다.
2 |
$cd /cygdrive/c/Users/John/workspace/HelloNDK\ |
2) ndk-build 를 실행하여 라이브러리로 만듭니다.
1 |
John@John-PC ~/workspace/HelloNDK |
2 |
$ /cygdrive/d/Dev/Android/android-ndk-r7b/ndk-build |
3 |
Compile thumb : csource <= csource.c |
4 |
SharedLibrary : libcsource.so |
5 |
Install : libcsource.so => libs/armeabi/libcsource.so |
3) Eclipse 의 HelloNDK 프로젝트 밑에 libs 라는 폴더가 생성되고 그 아래 libcsource.so 라는 파일이 아래그림처럼 나와야 합니다.
7. 프로젝트 실행
아래 그림처럼 나오면 성공입니다.
참고 URL : http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/