인디노트

[JAVA] jni로 HelloWorld출력 (package에 포함) 본문

소스 팁/Java, Android, Kotlin

[JAVA] jni로 HelloWorld출력 (package에 포함)

인디개발자 2018. 10. 16. 11:34

native메소드를 포함하는 클래스 작성

JNI롤 포함하는 클래스를 만든다.

1
2
3
4
5
6
7
package com.my;
 
public class HelloUtility {
 
    public static String foo(String str);
    static { System.loadLibrary("helloutil"); }
}

HelloUtility 클래스가 com.my 패키지에 포함되도록 소스 상단에 package com.my;을 추가해야 한다.

native메소드를 포함하는 클래스 컴파일

HelloUtility 컴파일 할 때 -d 옵션을 사용한다. 아래 명령어를 입력하면 현재 디렉토리에 com/my 폴더가 생성된다.

1
javac -d . HelloUtility.java

native 라이브러리 개발을 위한 header 생성

JNI 헤더를 생성할때는 클래스명 앞에 아래와 깉이 패키지명을 포함 시키다.

1
javah -jni com.my.HelloUtility

native 라이브러리 개발

헤더를 포함시키고 함수를 구현한다. 함수명은 Java + 패키지명 + 클래스명 + 함수명를 언더바로 구분해서 아래와 같이 JNI명명규칙에 따라야 한다.

1
2
3
4
5
JNIEXPORT jstring JNICALL Java_kr_my_HelloUtility_foo(JNIEnv *env, jobject obj, jstring data)
{
    // TODO
    return data;
}

native 파일 컴파일

구현된 native 함수가 포함된 소스를 컴파일해서 라이브러리를 생성한다.

native 함수 사용

이제 프로젝트내에서 아래 소스와 같이 HelloUtility를 import만 하면 native 함수를 사용 할 수 있게 된다.

1
2
3
4
5
import kr.my.HelloUtility;
class Foo{
    ...
    String value = HelloUtility.foo("xxxx");
}


반응형
Comments