안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요.
c 소스를 안드로이드에 포팅 해야 하는데요.
검색 하다가 JNI 에 대해 알게 되었습니다.
JNI 의 경우
java 에서 native로 함수 선언 해주고 c 에서 구현 하는 식으로 되어 있는거 같습니다.
ex> hello-jni sample source
java source
public native String stringFromJNI();
c source
jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz )
{
return (*env)->NewStringUTF(env, "Hello from JNI !");
}
여기서 질문 입니다.
안드로이드 JNI 에서 callbackfuntion 이 존재 하나요?
위 형식은 어떻게 보면 java 에서 c 를 호출 하는 식으로 볼 수 있습니다.
반대로 c 에서 java 함수를 호출 하게 할 수 있는지에 대해 궁금 합니다.
java source
public void test()
{
......
}
c source
java에 있는 test() 함수 호출
이상 입니다. 즐거운 하루 되세요.
c 소스를 안드로이드에 포팅 해야 하는데요.
검색 하다가 JNI 에 대해 알게 되었습니다.
JNI 의 경우
java 에서 native로 함수 선언 해주고 c 에서 구현 하는 식으로 되어 있는거 같습니다.
ex> hello-jni sample source
java source
public native String stringFromJNI();
c source
jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz )
{
return (*env)->NewStringUTF(env, "Hello from JNI !");
}
여기서 질문 입니다.
안드로이드 JNI 에서 callbackfuntion 이 존재 하나요?
위 형식은 어떻게 보면 java 에서 c 를 호출 하는 식으로 볼 수 있습니다.
반대로 c 에서 java 함수를 호출 하게 할 수 있는지에 대해 궁금 합니다.
java source
public void test()
{
......
}
c source
java에 있는 test() 함수 호출
이상 입니다. 즐거운 하루 되세요.
2010.05.12 18:38:10
아래와 같이 Function이 존재 합니다.
더 자세한 것은 JNI관련 부분을 찾아 보시고,
android ndk에서 jni.h를 검색해 보시면 사용할 수 있는 Function을 보실 수 있습니다.
대부분 함수명을 보면 어떤것인지 알 수 있으실 꺼에요.
도움이 되셨길......
//
// JNI Fuction을 사용하기 위한 env를 가져옴.
//
(*g_VM)->AttachCurrentThread (g_VM, (JNIEnv **) &env, NULL);
//
// java의 com.dykim.android.ViewPlayer.ViewPlayerJNILib 클래스를 가져옴.
//
cls = (*env)->FindClass(env, "com/dykim/android/ViewPlayer/ViewPlayerJNILib");
if( cls == NULL )
{
LOGI("Image Request FindClass Fail!!!");
return;
}
#if 1
//
// 보낼 String을 만듬.
//
jstr = (*env)->NewStringUTF(env, path);
//
// 위의 가져온 Class에서 Static Method의 ID를 가져옴. Method이름이 RequestImageDecode
// IIILjava/lang/String;)V에서 III는 integer 인자 3개를 말하고, Ljava/lang/String;은 String을 의미함.
// 다시 말하면 integer 인자 3개 String 인자 1개임.
//
mid = (*env)->GetStaticMethodID(env, cls, "RequestImageDecode", "(IIILjava/lang/String;)V");
if( mid == NULL )
{
LOGI("Image Request GetStaticMethodID Fail!!!");
return;
}
//
// Static Method 호출.
//
(*env)->CallStaticVoidMethod(env, cls, mid, buffer, width, height, jstr);
다른 분들께서 자세히 답변을 달아주시겠지만 혹시 몰라서 짧게나마 달아드리자면,
'가능합니다.'