Я застрял с этим, мне нужно вызвать функцию Java из c / c ++.
В примерах и руководствах я вижу только приложение Java, вызывающее метод ac, и в этом же методе вызывающее другойметод Java, но я хочу вызвать метод Java из любой части кода.Вот что у меня есть:
static JNIEnv mEnv;
static jclass mClassAndroidActivity;
static mMethodSayHello;
JNIEXPORT void JNICALL JNI_FUNCTION(AndroidActivity_nativeInit)(JNIEnv* env, jobject obj, int width, int height)
{
mEnv = env;
jclass cls = (*env)->GetObjectClass(env, obj);
mClassAndroidActivity = (*env)->NewGlobalRef(env, cls);
mMethodSayHello = (*env)->GetMethodID (env, mClassAndroidActivity, "SayHello", "(Ljava/lang/String;)V");
}
//this method is called from a cpp
void nativeSayHello(char* msg)
{
jstring string = (*mEnv)->NewStringUTF(mEnv, msg);
(*mEnv)->CallVoidMethod(mEnv, mClassAndroidActivity, mMethodSayHello, string);
}
, но всегда происходит сбой, я пытался без NewGlobalRef, используя mEnv вместо env в JNI_Function, я пытался получить идентификатор метода из JNI_OnLoad, новсегда дает сбой.
Это журнал, который я получаю:
02-15 18: 09: 48.520: W / dalvikvm (27904): ПРЕДУПРЕЖДЕНИЕ JNI: threadid = 1, используя env из threadid = 0