AndroidRuntime :: getJNIEnv()返回NULL

web*_*ius 4 android

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

JNIEnv* env = AndroidRuntime::getJNIEnv();
Run Code Online (Sandbox Code Playgroud)

上面的语句总是在我的函数中返回NULL.然后我使用env并使用回调机制在Java代码中调用一些方法.

getJNIEnv()中的这部分代码始终返回NULL.

if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK)
{
        return NULL;
}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我代码有什么问题?这看起来很正常,因为JNI中的其他函数也具有几乎相似的实现.

fad*_*den 7

首先,不要使用AndroidRuntime::getJNIEnv().这不是NDK API的一部分.您应该使用JNI GetEnv函数.

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

这两个都需要一个JavaVM指针.每个进程中只有一个,因此您可以在传入时JNI_OnLoad从程序(GetJavaVM函数)进行调用或设置调用JNIEnv.

如果您还没有,请阅读JNI提示页面(其中包括对一些全面的JNI文档的参考).