NDK처음 시작하기 - 복잡한 함수 만들어 보기

기존에 NDK로 HelloWorld는 찍을 수 있는 단계까지 오셔야 이해 할 수 있습니다. 지금 부터는 NDK쪽은 없을 것이며, JNI에 대해서 자세히 알아볼 것입니다. (NDK사용환경 구축하기NDK처음 시작하기를 참고 하세요)



네이티브코드에서 자바의 자원(객체, 객체의 변수, 함수등등)을 사용할 경우가 있습니다.

예를 들어서 핵심 모듈은 자바로 구현 되어 있고, 라이브러리는(Wrapper와 같은 경우) C++로 구현해야 하는 경우 라이브러리(C/C++)에서 다시 자바의 자원을 이용해야 합니다.

아주 간단한 프로그램을 만들어서 이를 구현해 보록 합니다. 만들 프로그램은 pass라는 함수와 javaPass라는 함수를 갖고 있습니다. pass라는 함수는 navtive함수이고, javaPass는 자바의 함수 입니다. 

아래를 보면서 계속 이야기 해 봅시다.


개념도


2010-10-08_17.19.54.jpg


  • 프로그램이 동작하는  순서는 다음과 같습니다.
  1. 프로그램은 네이티브 함수인 pass를 호출합니다.
  2. 네이티브에서 pass함수는 다시 자바의 javaPass함수를 호출합니다.
  3. 자바의 javaPass함수는 입력으로 들어온값을 그냥 넘겨 주기만 하므로 그대로 받은 값을 네이티브에게 넘겨 줍니다.
  4. 네이티브의 pass함수는 그 결과를 다시 함수를 호출한 자바쪽으로 넘겨 줍니다.



"왜 이런 이상한짖을 한냐!!" 라고 생각 하지 마세요ㅠ 설정이니까요.


다른 부부은 다 생략하고 Java_JNITest_pass()함수를 보도록 합시다.


  1. #include <jni.h>

    JNIEXPORT jint JNICALL Java_com_danguria_test_JNITest_pass(
    JNIEnv* env, jobject obj, jint x)
    {

        // 호출할 함수가 있는 객체를 가져 온다.jclass cls = (*env)->GetObjectClass(env,obj);


  2.     // 호출할 함수ID를 가져 온다.jmethodID pass = (*env)->GetMethodID(env, cls, "javaPass", "(I)I");;

  3.     // 함수를 호출한다.jint ret = (*env)->CallIntMethod(env, obj, pass, x);
        return ret;
    }


JNI를 잘하기 위해서 JNI에서 제공하는 JNIEnv와 jobject , jclass 들을 자유자재로 구사 할 수 있어야 합니다.  코드만 보더라고 잘 이해 할 수 있도록 주석을 열심히 달았습니다.


세세한 부분은 지금부터 해야 할 일입니다!!!



저작자 표시
신고
by danguria 2011.01.13 03:19
NDK에 대해서 함께 공부해 봅시다.
  • 자바와 네이티브 환경의 라이브러리를 연결하기 위해서 안드로드가 제공하는 Navtive Development Kit에 대해서 정리해 놓은 공간입니다.
  • 저도 처음 공부하면서 개발에 도움이 되고자 정리 하고 있습니다.

    개발하면서 격게 되는 문제점과 여러가지 이슈들에 대해서 정리 하려고 합니다.

  • 창조적인 내용은 없을지 모르더라도 최선을 다해 정리 하고 있습니다.

    여러분께서도 함께 하고 싶으시다면 많은 댓글 달아 주시기 바랍니다.

저작자 표시
신고
by danguria 2011.01.12 22:54

1. Install NDK


NDK는 안드로이드 개발 환경이 이미 구축되어 있어야지 사용 가능하다. 안드로이드 개발 환경이 구축되어 있지 않다면, 먼저 안드로이드 개발 환경 구축부더 하기를 바란다.(자바, 이클립스, 안드로이드 설치방법 참고)


Screenshot.png

  • 받은 압축파일을 푼다. 압축푸는 경로는 아무래도 상관 없다( 앞으로 압축 푼 경로를 <ndk>라고 언급하겠다.)

     $ unzip android-ndk-(버전정보).zip



  • <ndk>/ndk-buile 실행파일을 실행 시켜서 다음과 같은 결과가 나오면 확경 구축 끝!!!

Screenshot-1.png



기타 - 우분투에서 디바이스 인식이 안될 경우

Declare your application as "debuggable" in your Android Manifest.





저작자 표시
신고
by danguria 2011.01.12 22:52
| 1 |

티스토리 툴바