如何在编写本机代码时使用env?

时间:2013-11-13 06:14:41

标签: android-ndk java-native-interface

JNIEXPORT jstring JNICALL Java_com_marakana_NativeLib_hello (JNIEnv * env, jobject obj) 
{                                         
    return (*env)->NewStringUTF(env, "Hello World!");
}  

什么是env?请不要说指针。但它指的是什么呢?即使没有初始化,我们也在使用(*env)->NewStringUTF。怎么可能?

1 个答案:

答案 0 :(得分:3)

虚拟机将

JNIEnv传递给您的函数。它本质上是一个指向函数指针数组的指针。 (还有一点比这更多,但函数指针是有趣的一点。)

如果启用了CheckJNI,则VM会传入指向不同函数数组的指针,这些函数在调用基函数之前执行扩展检查。

与VM关联的每个线程都有自己的JNIEnv。始终使用传递给方法的方法,不要将其存储在全局或静态本地。