Android ndk.无法获得对JVM的引用

Mak*_*sov 3 c android android-ndk

几天前,我开始玩android NDK.试图从书中编译一个示例程序出现了一个小问题.

所以在这里我需要获得对JavaVM的引用.

// Global env ref (for callbacks)
static JavaVM *g_VM;

JNIEXPORT jint JNICALL Java_jni_Natives_LibMain
  (JNIEnv * env, jclass class, jobjectArray jargv)
{
    // obtain a global ref to the caller jclass
    (*env)->GetJavaVM(env, &g_VM); ...
Run Code Online (Sandbox Code Playgroud)

Eclipse说" method 'GetJavaVM()' could not be resolved"就像包含其他方法的每一行一样(*env) object.

包含目录有路径:C:\programs\IDE\adt-bundle-windows-x86_64-20130219\android-ndk-r8e\platforms\android-14\arch-arm\usr\include所以我不认为它可能是包含路径的东西,但我可能是错的.

foo*_*o64 5

你在编译.cpp文件吗?<jni.h>对C和C++有不同的JNIEnv实现,而你正在使用C版本.在C++中,您的代码看起来像这样:

 JNIEXPORT jint JNICALL Java_jni_Natives_LibMain
   (JNIEnv * env, jclass class, jobjectArray jargv)
 {
     // obtain a global ref to the caller jclass
     env->GetJavaVM(&g_VM); ...
Run Code Online (Sandbox Code Playgroud)

获取JavaVM引用的常规方法是在JNI_OnLoad中:

 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* aReserved)
 {
     // cache java VM
     g_VM = vm;
     ...
 }
Run Code Online (Sandbox Code Playgroud)