JNIでJavaからC++のメソッドを実行

ネイティブ連携はC++Objective-C or Javaの一方向で事足りることが多いですが、
ネイティブ側からC++のメソッドを呼びたいケースもやはりあります。
(課金処理の結果をC++に渡すなど)

JNIは少しややこしいので、メモをしておきます。
JNIのクラスなど、ネイティブ連携のクラスはCocos2d-x上からTwitterにツイートする - おかひろの雑記などと同じ形で作成してあるとします。

今回使用したバージョン

  • Cocos2d-x 3.2


AppActivity.java

public class AppActivity extends Cocos2dxActivity
{
	// C++側のメソッドを呼ぶ宣言
	private static native void sampleNativeMethod(boolean result,String test);
	...


	// 実際の呼び出し
	sampleNativeMethod(true,"Test");

NativeCodeLauncherJni.cpp

	void Java_org_cocos2dx_cpp_AppActivity_sampleNativeMethod(JNIEnv *env,jobject thiz,jboolean success,jstring test)
	{
		const char *testChar = env->GetStringUTFChars(test,0);
		
		// ここで処理を行う
		
		// 解放
		env->ReleaseStringUTFChars(test, testChar);
	}

JavaからStringを引数にして呼び出す場合は、変換が必要のようです。