-
[안드로이드] NDK 기본 예제Programming/안드로이드 2014. 1. 27. 04:02반응형
NDK를 이용한 기본 예제이다. 간단한 프로그래밍은 기본예제의 변형으로 가능할 것이다. 더 깊은 내용은 나중에 포스팅 하도록 하겠다.
NDK 설치 완료후 제대로 설치가 되었는지 이 예제를 통해서 확인해보길 바란다. 먼저 프로젝트를 하나 생성한다. 프로젝트명은 HelloJNI로 하였다.
프로젝트 생성후 jni라는 이름의 폴더를 하나 생성한다. 이 폴더안에 2개의 파일을 생성할 예정이다.
2개의 파일 이름은 Android.mk와 hello-jni.c 이다.
jni폴더 생성후 [마우스 오른쪽 클릭] -> [New] -> [File] 을 눌러 파일을 생성한다.
위의 그림의 방식처럼 hello-jni.c 와 Android.mk 파일을 만들었다면 두 파일에 내용을 넣는다. 먼저 hello-jni.c 파일부터 내용을 넣겟다.
hello-jni.c
#include <string.h> #include <jni.h> jstring Java_tjssm_hellojni_MainActivity_stringFromJNI( JNIEnv* env, jobject thiz ) { return (*env)->NewStringUTF(env, "Hello from JNI !"); }
NDK 설치를 확인하기 위한 간단한 예제이기 때문에 자세한 설명은 생략하도록 하겠다.
여기서 주의할 점은 jstring Java_tjssm_hellojni_MainActivity_stringFromJNI()이다.
jstring은 return 타입이고 그다음은 Java_패키지명1_패키지명2_class명_class에서만든메소드명() 이다.
ex) return타입이 jstring 이고 패키지명이 tjssm.hellojni이고 class명이 MainActivity이고, class에 만들어 놓은 메소드명이 stringFromJNI 이기때문에jstring Java_tjssm_hellojni_MainActivity_stringFromJNI() 이라고 쓴다.
여기서 주의할 점은 패키지명이나 class명에 '_'기호가 들어갈 경우 에러가 난다는 것이다. ndk를 이용한 프로그래밍에서는 '_'기호를 넣지 않도록 한다.
다음은 Android.mk 파일에 내용을 넣겠다.
Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello-jni LOCAL_SRC_FILES := hello-jni.c include $(BUILD_SHARED_LIBRARY)
LOCAL_MODULE 은 c파일의 이름
LOCAL_SRC_FILES 에는 c파일의 이름에 .c를 붙여주면 된다.
다음은 JAVA소스이다. jni를 호출하는 MainActivity의 소스이다.
MainActivity.java
public class MainActivity extends Activity { private TextView tv; static { System.loadLibrary("hello-jni"); } public native String stringFromJNI(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tv = (TextView) findViewById(R.id.tv_result); tv.setText(stringFromJNI()); } }
System.loadLibrary에 이전에 만들었던 c파일의 이름인 hello-jni를 넣어준다.
public native String stringFromJNI() 라는 메소드가 jni와 연결된다.
return 타입이 String 이므로 이전에 작성했던 hello-jni로부터 String을 return 받아 tv라는 TextView로 값이 전달된다.
위와 같이 소스를 작성하였다면 ndk-build를 실행한다. cygwin 폴더안의 android-ndk폴더를 환경변수로 등록을 하였다면 cmd 창을 실행하여 현재 작성한 프로젝트 파일의 경로로 이동한다. 그후에 ndk-build라는 명령어를 입력하면 현재 프로젝트의 libs->armeabi 라는 폴더가 생기며 폴더안에 파일이 생성되어 있을것이다.
이제 이 프로젝트를 실행시키면 다음과 같은 결과를 얻을 수 있다.
매번 cmd창을 이용하여 ndk build를 할 수는 없으니 다음에는 이클립스에서 ndk build하는 방법을 알아보도록 하겠다.
2014/01/27 - [Programming/안드로이드] - [안드로이드] Eclipse에서 NDK-build 하기
반응형'Programming > 안드로이드' 카테고리의 다른 글
[안드로이드] 안드로이드 SDcard의 폴더 시간 변경하기 (0) 2014.02.17 [안드로이드] Eclipse에서 NDK-build 하기 (4) 2014.01.27 [안드로이드] 안드로이드 NDK 설치방법 (1) 2014.01.25 [안드로이드] Activity전환 없이 구글 음성인식(STT) 사용하기 (25) 2013.12.29 [안드로이드] 뒤로가기(Back 버튼) 두번 눌러 앱 종료하기 (15) 2013.12.27