http://lsit81.tistory.com/entry/JNI-%EA%B8%B0%EC%B4%88
JNI 란?
JNI는 Java Native Interface의 약자로 Java와 C/C++ 사이에 Interface를 제공하여 서로의 기능을 사용 가능하도록 만들어 줍니다.
장점
동작 속도가 Java보다 빠릅니다.
기존에 구현된 C/C++ 라이브러리를 조금만 수정하면 Java에서 사용할 수 있습니다.
단점
CPU에 의존적이며 (안드로이드의 경우 x86, ARM CPU만 지원 합니다.)
디버깅이 어렵다.
JNI Function 생성 규칙.
1. Java Class 생성
: Java에서 C/C++의 기능을 호출하기 위해서는 먼저 Interface를 정의 해야 하므로
Java에서 Native C/C++을 호출하기 위한 클래스를 만들어 줍니다.
1 2 3 4 5 |
package com.example.jnitoast; public class Toast { public native void displayToast(CharSequence charseq); } |
여기서 native는 Native Function이라는 것을 알려주는 Keyword입니다.
2. Native Function 만들기.
Native Function Naming 규칙.
Java_[패키지 명]_[클래스 이름]_[native function 이름]
(* 패키지를 구분하는 "."은 "_"로 대체 합니다.)
자바와 JNI 타입
자바에서 건네준 변수는 아래 테이블에 나열된 것 같이 자동으로 해당 변수 타입으로 매핑됩니다.
Java |
JNI (C/C++) |
JNI (배열) |
boolean |
jboolean |
jbooleanArray |
byte |
jbyte |
jbyteArray |
char |
jchar |
jcharArray |
short |
jshort |
jshortArray |
int |
jint |
jintArray |
long |
jlong |
jlongArray |
float |
jfloat |
jfloatArray |
double |
jdouble |
jdoubleArray |
object |
jobject |
jobjectArray |
그래서 위 displayToast Function은 다음과 같이 정의할 수 있습니다.
void Java_com_example_jnitoast_Toast_displayToast(JNIEnv* env, jobject thiz, jobject text)
여기서 첫번째, 두번째 파라미터는 Native Function 정의시 항상 정의되며,
각 파라미터의 의미는 다음과 같습니다.
JNIEnv env
- JNI 인터페이스 포인터는 자바 메서드와 매핑되는 각 네이티브 함수를 위한 매개 변수로 전달되며
- 이 포인터는 JNI 환경에 있는 함수들과 상호작용을 하도록 해줌니다.
주로 FindClass, GetStaticMethodID 등을 할때 사용됩니다.
jobject thiz
- 두번째 파라미터로 넘어온 jobject는 현재 클래스를 의미합니다
여기서는 Java의 Toast.this를 의미합니다.
jobject text
- 여기서 text는 CharSequence 객체를 뜻하며, Java와 JNI 타입에 정의되지 않은 변수는 모두 jobject로 매핑 됩니다,
자세한 내용은 JNI Program Guide 문서를 첨부하였으니 살펴보시기 바랍니다.
'차근차근 > JAVA JSP' 카테고리의 다른 글
java controller , java servlet 차이?? (0) | 2014.07.26 |
---|---|
request , response (0) | 2014.07.26 |
if문 equals / == (0) | 2014.07.26 |
hashmap 의 value에 다른 배열 넣기/value에 값 여러개 주기 (0) | 2014.07.26 |
자바API문서?? (0) | 2014.07.26 |