[컴][안드로이드][자바] JNI 동작원리 개념 - 2


이전 글에서는 JNI 를 java 측에서 JNI 를 이용해서 c/c++ 함수를 호출하는 방법을 알아보았다. 이번에는 c/c++ library 측에서 JNI를 이용하여 java 의 함수를 호출하는 방법을 알아보도록 하자.

근본적으로 JNI 를 이용해서 상대의 함수를 이용한다는 개념은 같다. 차이는 jni 가 jvm 에 있는 녀석이라서 java 에서 사용할 때는 크게 신경쓸 것이 c/c++ 쪽에서는 JNI 를 이용하기 위해 JNIEnv* 의 reference 를 넘겨주는 작업이 필요하다.

그럼 이제부터 c/c++ 에서 java 의 함수를 이용하는 방법을 알아보자.

C/C++ library -> Java class

java 의 class 를 이용하려면 JVM 이 있어야 한다. 그러므로 c/c++ 에서 java 의 함수를 사용할 때는 먼저 JVM 을 memory 에 올리는 작업이 선행되게 된다.
JNI_CreateJavaVM(&vm, (void**)&env, &vm_args)
를 통해서 JVM 을 memroy 로 불러오게 된다. 그러면 이제 env 에는 JNIEnv* 의 reference 가 return 되기 때문에 이제 이 env 를 이용해서 JNI 함수를 사용할 수 있게 된다.

지금부터는 이전의 방법과 같다. class 를 찾고, id 를 찾고, method/field 를 찾고, 원하는 작업을 해주면 된다.

함수의 사용법이나 자세한 설명은 ref.1, 2 을 참조하도록 하자.

image

Reference

  1. Invocation API
  2. http://www.inonit.com/cygwin/jni/invocationApi/c.html

댓글 없음:

댓글 쓰기