마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

JNI 에서 JNI 쪽으로 함수 호출하는 방법?

0 추천

안녕하세요. 

개발을 하다 막히는 것이 있어서 질문을 드립니다.

JNI가 자바에서 네이티브로 호출하기 위해 사용되는데요, 저는 그 반대로 해야 돼는 부분이 있는데 잘 안돼요.

오리지널 네이티브 C에서 JNI의 A함수로 자료를 전달, 이 전달받은 함수를 자바로 올리기 위해 벼레별짓을 다해도 답은 안나오네용....

 

 

    void retch(int ret) //오리지널 C언어 코드에서 헤더파일을 참조하여 retch 함수에 ret값을 전달.
    { 

          if(ret != 0)
          SendOn(ret);   //여기서 아래 함수인 JNI함수를 호출하려 합니다.
    }

    JNIEXPORT void Java_com_example_test_MainActivity_SendOn(JNIEnv* env, jobject obj, jint ret)
    { 

         //이 부분에는 JNI 콜백 내용이 들어갑니다.

    }

 

미치겄네요 laugh

 

제가 하려는 부분이 

 

오리지널 C언어에서 계속해서 갱신되는 데이터를 헤더파일을 통해 jni 쪽 소스로 보내고 그 값을 콜백함수를 통해 위로 올리려 하는데 방향도 잘못잡은거 같고, 방법을 아무리 찾아봐도 나오질 않아요.

 

조언이나 참조할만한 사이트가 있다면 부탁드립니다. ( _ _ ) 살려주세요.

 

정상??인 (340 포인트) 님이 2015년 11월 11일 질문

1개의 답변

0 추천
 
채택된 답변

자바로 올리실 거라면 

안드로이드 MediaPlayer 쪽 소스를 확인 해 보세요..

https://github.com/android/platform_frameworks_base/blob/master/media/jni/android_media_MediaPlayer.cpp

코드 중 

fields.post_event = env->GetStaticMethodID(clazz, "postEventFromNative",
                                               "(Ljava/lang/Object;IIILjava/lang/Object;)V");

env->CallStaticVoidMethod(mClass, fields.post_event, mObject, msg, ext1, ext2, jParcel); 부분이 그 부분으로 java MediaPlayer 클래스의     

private static void postEventFromNative(Object mediaplayer_ref,       int what, int arg1, int arg2, Object obj) 메소드를 jni를 통해 호출 하는 방식으로 데이터를 java 에 올려 주는데..

 

비슷하게 구현 해 주시면 됩니다. 

  
익명사용자 님이 2015년 11월 11일 답변
정상??인님이 2015년 11월 11일 채택됨
이런걸 우쨔 찾으셨습니까... 존경합니다 ㅠㅠ... 정말 감사해요.
...