Как правило,
- если аргументы функции JNI имеют
jclass
, то эта функция JNI соответствует классу метода стороны Java (собственные методы, объявленные с" статическими «). jclass
является ссылкой на текущий класс .
- если аргументы функции JNI имеют
jobject
, то эта функция JNI соответствует экземпляру метода стороны Java * * (собственные методы объявлены без" статические «). jobject
является ссылкой на текущий экземпляр .
В частности,
JNIEXPORT void JNICALL Java_org_cocos2dx_cpp_AppActivity_pauseSounds(JNIEnv* env, jclass thiz);
соответствует статическому собственному методу ( метод класса ) на вашей стороне Java, т.е.
package org.cocos2dx.cpp
class AppActivity{
public static native void pauseSounds();
}
Пока ниже метод JNI
JNIEXPORT jstring JNICALL Java_org_cocos2dx_cpp_AppActivity_score(JNIEnv *env, jobject instance);
соответствует нативному методу ( метод экземпляра ) на вашей стороне Java, т.е.
package org.cocos2dx.cpp
class AppActivity{
public native String score();
}
если мой метод не использует ни один из этих параметров, зачем они нужны?
Эти параметры генерируются автоматически и будут использоваться JNI при необходимости, например, в случае, если вам нужно вызвать методы Java class , вам нужно что-то вроде ниже (()V"
это метод JNI подписи):
jmethodID staticMethod = env->GetStaticMethodID(clazz, "pauseSounds", "()V");
В случае, если вам нужно перезвонить методы экземпляра на стороне Java, вам нужно что-то вроде ниже (()Ljava/lang/String;"
- это сигнатура метода JNI):
env->CallObjectMethod(instance, "score", "()Ljava/lang/String;");