검색결과 리스트
android ndk에 해당되는 글 3건
- 2011.01.13 [04 NDK Basic] NDK Overview
- 2011.01.13 [03 NDK Basic]NDK처음 시작하기 - 복잡한 함수 만들어 보기
- 2011.01.13 [02 NDK Basic] NDKExam 작성 해보기 - add 함수만들기
벌써 네번째 정리 입니다.
늦은
감이 있지만 NDK가 뭐인고? 라는 것을 정리 하지 않았군요. NDK를 이야기 하기 전에 JNI를 알고 계시나요? JNI는 C나
C++로 작성된 머신코드(Native machine code)를 Java 프로그램이 사용할 수 있도록 해주는 인터페이스(interface)입니다.
안드로이드 프로그래밍을 할때는 자바언어로 구현하죠.. 자, 그럼 답이 나왔네요. NDK는 안드로이드 응용 프로그램을 만들때 C/C++로 작성된 머신코드를 안드로이드 프로그램에서 사용할 수 있도록 해주는 도구입니다.
저는 개인적으로 자바와 C/C++쪽을 모두 잘 해야 한다고 생각 하기 때문에 NDK를 꼭 알고 싶었지요.. JNI를 기본적으로 잘 알고 있다면 NDK는 크게 어렵지 않은 것 같습니다.
빠른 처리를 요구하는 루틴을 작성할때 좋습니다.
C/C++이 자바 보다 빠른건 당연합니다. 그러니 빠른 처리를 요구하는 루틴을 C/C++로 작성하고 그것을 호출하면 성능 향상을 꾀할 수 있죠
하드웨어 제어 할때 필요합니다.
안드로이드의 코어는 리눅스 입니다. 하드웨어를 직접 접근 하거나 디바이스 드라이버를 개발 할때는 당연히 C로 개발해야 하죠. 자바에서는 그렇게 구현된 코드를 이용해야 합니다.
기존의 C/C++프로그램의 재사용할 수 있습니다.
기조에 C/C++로 만들어진 좋은 소스가 있다면 그것을 굳이 자바로 다시 만들기 위해 많은 노력이 필요합니다. 이때 NDK를 사용하면 편리 하겠죠.
프로그램 구조가 복잡해 집니다.
프로그램을 설계할때, 프로젝트를 진행할때, 나중에 유지 보수 할때, 복잡한 구조때문에 코드분석하기가 힘들 수 있습니다.
작성된 native srouces를 $PROJECT/jni/ 에 둡니다.
여기서 $PROJECT는 여러분이 작성한 안드로이드 프로젝트가 위치 하고 있는 주소 입니다.
$NDK/ndk-build 명령어를 통해 native codes를 빌드합니다.
여기서 $NDK는 여러분이 설치한 NDK의 최상이 경로를 의미합니다.
실습을 위한 포스팅을 NDK First step - 1와 NDK First step - 2에 있으니 참고 하세요.
다음에는 makefile의 일부분인 Android.mk를 작성하는 방법을 알아보도록 하겠습니다.
기존에 NDK로 HelloWorld는 찍을 수 있는 단계까지 오셔야 이해 할 수 있습니다. 지금 부터는 NDK쪽은 없을 것이며, JNI에 대해서 자세히 알아볼 것입니다. (NDK사용환경 구축하기 와NDK처음 시작하기를 참고 하세요)
네이티브코드에서 자바의 자원(객체, 객체의 변수, 함수등등)을 사용할 경우가 있습니다.
예를 들어서 핵심 모듈은 자바로 구현 되어 있고, 라이브러리는(Wrapper와 같은 경우) C++로 구현해야 하는 경우 라이브러리(C/C++)에서 다시 자바의 자원을 이용해야 합니다.
아주 간단한 프로그램을 만들어서 이를 구현해 보록 합니다. 만들 프로그램은 pass라는 함수와 javaPass라는 함수를 갖고 있습니다. pass라는 함수는 navtive함수이고, javaPass는 자바의 함수 입니다.
아래를 보면서 계속 이야기 해 봅시다.
"왜 이런 이상한짖을 한냐!!" 라고 생각 하지 마세요ㅠ 설정이니까요.
다른 부부은 다 생략하고 Java_JNITest_pass()함수를 보도록 합시다.
#include <jni.h>
JNIEXPORT jint JNICALL Java_com_danguria_test_JNITest_pass( JNIEnv* env, jobject obj, jint x)
{
// 호출할 함수가 있는 객체를 가져 온다.jclass cls = (*env)->GetObjectClass(env,obj);
JNI를 잘하기 위해서 JNI에서 제공하는 JNIEnv와 jobject , jclass 들을 자유자재로 구사 할 수 있어야 합니다. 코드만 보더라고 잘 이해 할 수 있도록 주석을 열심히 달았습니다.
세세한 부분은 지금부터 해야 할 일입니다!!!
기NDK환경 구축이 다되면, NDK를 이용하여 가장 쉬운 예제를 하나 만들어 보도록 하자. 두 수의 합을 구하는 add 함수를 네이티브쪽에서 구현해 보는 예제다.
우리가 만들 프로젝트에서는 두 정수를 입력 받아서 합을 리턴하는 함수를 C로 구현하고 그것을 안드로이드에서 사용할 것이다. 전체적으로 NDK 사용하는 법을 설명하는 페이지니 만큼 자세한 설명은 생략하도록 하겠다.
(이후에 있는 상세 설명 페이지를 참고 하면 되겠다.)
댓글