AndroidRuntime::getJNIEnv()返回NULL
我在JNI部分中有以下代码片段:AndroidRuntime::getJNIEnv()返回NULL,android,Android,我在JNI部分中有以下代码片段: JNIEnv* env = AndroidRuntime::getJNIEnv(); 上述语句在我的函数中总是返回NULL。然后我使用env并使用回调机制在Java代码中调用一些方法 getJNIEnv()中的这部分代码总是返回NULL if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { return NULL; } 谁能告诉我代码有什么问题吗?我觉得这很正常,
JNIEnv* env = AndroidRuntime::getJNIEnv();
上述语句在我的函数中总是返回NULL。然后我使用env并使用回调机制在Java代码中调用一些方法
getJNIEnv()中的这部分代码总是返回NULL
if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK)
{
return NULL;
}
谁能告诉我代码有什么问题吗?我觉得这很正常,因为JNI中的其他函数也有类似的实现。首先,不要使用
AndroidRuntime::getJNIEnv()
。这不是NDKAPI的一部分。您应该改用JNIGetEnv
函数
其次,GetEnv
如果当前线程未连接到VM,则返回NULL。(请记住,JNIEnv
是特定于线程的。)如果您自己创建了线程,则需要使用JNIAttachCurrentThread
函数来附加它
这两者都需要一个JavaVM
指针。每个进程只有一个这样的函数,因此您可以在JNI_OnLoad
期间获得它,或者在传入JNIEnv
时从程序(GetJavaVM
函数)调用安装程序
如果您还没有,请通读该页面(其中包括一些全面的JNI文档的参考)