AndroidRuntime::getJNIEnv()返回NULL

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; } 谁能告诉我代码有什么问题吗?我觉得这很正常,

我在JNI部分中有以下代码片段:

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的一部分。您应该改用JNI
GetEnv
函数

其次,
GetEnv
如果当前线程未连接到VM,则返回NULL。(请记住,
JNIEnv
是特定于线程的。)如果您自己创建了线程,则需要使用JNI
AttachCurrentThread
函数来附加它

这两者都需要一个
JavaVM
指针。每个进程只有一个这样的函数,因此您可以在
JNI_OnLoad
期间获得它,或者在传入
JNIEnv
时从程序(
GetJavaVM
函数)调用安装程序

如果您还没有,请通读该页面(其中包括一些全面的JNI文档的参考)