Date: 2016/3/18 Cate: Android, C++, cocos2d-x Tags: , ,  

cocos2d-xを使って開発しているときに、C++からJavaのコードを呼び出し、返り値としてStringを受け取りたいときがありました。
そのやり方のメモ。(もっとカンタンな方法あるのかも?)

C++側

std::string NativeUtils::getSystemData()
{
    JniMethodInfo t;
    if (JniHelper::getStaticMethodInfo(t, "com/example/NativeUtils", "getString", "()Ljava/lang/String;")) {
        jstring jstr = (jstring)t.env->CallStaticObjectMethod(t.classID, t.methodID);
        const char* str = t.env->GetStringUTFChars(jstr, 0);
        char* resStr = strdup(str);
        t.env->ReleaseStringUTFChars(jstr, str);
        t.env->DeleteLocalRef(t.classID);
        return resStr;
    }else{
        return "";
    }
}

Java側

public class NativeUtils {
    public static String getString(){
        return "何かしらのテキストだよ";
    }
}

ポイントは、CallStaticObjectMethodでjavaのコードを呼び出して、その返り値をjstringにキャストして、charにするためにゴニョゴニョするところでしょうか。

Leave a Reply