在Android Native可执行文件中获取JNIEnv的实例

时间:2017-02-26 20:43:30

标签: android android-ndk java-native-interface googletest

我有一个NDK共享库,我想对它进行一些测试。我目前使用googletest创建链接到库的本机可执行文件,遵循README.NDK中的说明。虚拟可执行文件可以在Android模拟器上运行。好。

现在,棘手的是共享库调用了JNIEnv实例的许多函数,例如:

  • env-> NewStringUTF()
  • ...

问题是,Android本机可执行文件如何获取JNIEnv的实例?

一种方法是使用下面描述的调用API。 http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html

但是,我查看了NDK的jni.h,似乎不允许使用此API:

/*
 * VM initialization functions.
 *
 * Note these are the only symbols exported for JNI by the VM.
 */
#if 0  /* In practice, these are not exported by the NDK so don't declare them */
jint JNI_GetDefaultJavaVMInitArgs(void*);
jint JNI_CreateJavaVM(JavaVM**, JNIEnv**, void*);
jint JNI_GetCreatedJavaVMs(JavaVM**, jsize, jsize*);
#endif

任何建议都非常感谢!

(我是Android的新手,所以如果我错了请纠正我。谢谢!)

1 个答案:

答案 0 :(得分:0)

这是通过AttachCurrentThread()完成的。

如果线程已经附加,则调用它是有利的。