jaehwa

jaehwa.egloos.com

포토로그



간단한 JNI 사용방법 (JNI 네이티브 함수를 직접 등록하지 않는 방법을 사용하지 않을 경우) 안드로이드 JNI & NDK


샘플의 소스는 문서와 같이 첨부한 hello-jni.zip 파일을 참고하기 바란다.

hello-jni.zip
 

NDK sample

참고소스: android-ndk-r4b/samples/hello-jni

 

HelloJni.java

package com.example.hellojni;

import android.app.Activity;

import android.widget.TextView;

import android.os.Bundle;

public class HelloJni extends Activity

{

    @Override

    public void onCreate(Bundle savedInstanceState)

    {

        super.onCreate(savedInstanceState);

        TextView  tv = new TextView(this);

        tv.setText( stringFromJNI() );

        setContentView(tv);

    }

 

    public native String  stringFromJNI();

    public native String  unimplementedStringFromJNI();

    static {

        System.loadLibrary("hello-jni");

    }

}

 

 

1) libhello-jni.so 라이브러리를 로딩한다.

2) 사용할 네이티브 메서드 stringFromJNI, unimplementedStringFromJNI 를 선언한다.

 

hello-jni.c

#include <string.h>

#include <jni.h>

 

jstring

Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,

                                                  jobject thiz )

{

    return (*env)->NewStringUTF(env, "Hello from JNI !");

}

 

자바에서 사용할 네이티브 메서드를 위와 같이 정의한다.

주의할점은 HelloJni 클래스의 패키지경로를 지정해야 한다는 것이다.

HelloJni.java 파일의 패키지 경로는 com.example.hellojni 이며 클래스 이름은 HelloJni 이다.

그러므로 네이티브에서 사요할 메서드의 이름앞에 Java_com_example_hellojni_HelloJni_ 를 꼭 붙여야 하는 것이다. 메서드 이름을 위와 같이 지정하지 않다면 Java에서 해당 네이티브를 사용시 찾지 못하는 문제가 생긴다.


덧글

댓글 입력 영역



애드센스 광고

애드센스 광고(링크단위)