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を引数にして呼び出す場合は、変換が必要のようです。