참고
이 글에선 Cocos2d-X 내부의 JNI Helper 를 이야기 합니다.
JNIHelper Include
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "platform/android/jni/JniHelper.h"
#endif
윈도우 환경헤선 include 할 필요가 없으니 if ~ endif 로 닫아 줍니다.
메소드 불러오기 참고
메소드를 불러오는 방식은 크게 두 가지로
- 기본 메소드 불러오기
- static 메소드 불러오기
로 구분할수 있는데 이 글에선 기본 메소드 불러오기 방식을 사용합니다.
static 메소드는 getStaticMethodInfo 를 쓴다.
메소드 불러오기 작성
#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    JniMethodInfo t;
    bool isHave = JniHelper::getStaticMethodInfo(t
                                        ,"org/cocos2dx/cpp/AppActivity"
                                        ,"getJavaActivity"
                                        ,"()Ljava/lang/Object;");
    jobject activityObj;
    if(isHave)
    {
        activityObj=t.env->CallStaticObjectMethod(t.classID, t.methodID);
    }
    isHave=JniHelper::getMethodInfo(t
                                ,"org.cocos2dx/cpp/AppActivity"
                                ,"callFunc"
                                ,"()V");
    if(isHave)
    {
        jstring jmsg = t.env->NewStringUTF(NULL);
        t.env->CallVoidMethod(activityObj,t.methodID,jmsg);
    }
#endif
*.java 파일의 소스 코드를 불러올 C++ 소스 코드를 위와 같이 작성한다.
- 4번째 줄 - .java 파일을 불러오기 위함 (안드로이드 일 경우 MainActivity)
- 5번째 줄 - 인자 값을 받기 위한 함수 호출
- 15번째 줄 - 역시 .java 파일을 불러오기 위함
- 16번째 줄 - 실행할 함수 호출
AppAcitivity
- JNI 를 사용하기 위해 public static Activity actInstance;를 추가
- 기본적으로 onCreate 를 만들어 주며 actInstance 를 초기화
@Override
public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      actInstance = this;
}
- actInstance를 받기 위한 함수 작성
public static Object getJavaActivity()
{
      return actInstance;
}
- JNI 를 이용해 들어갈 함수 생성
public void callFunc() {
      Log.d("jni test","test");
}
틀린 내용이 있다면 지적해 주시고, 
더 좋은 방법이나 생각을 공유해주세요.
