安卓系统。无法获取对 JVM 的引用

标签 android c 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); ...

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 所以我不认为它可能与包含路径有关,但我可能是错的。

最佳答案

您正在编译 .cpp 文件吗? 对 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); ...

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

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

关于安卓系统。无法获取对 JVM 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16376736/

相关文章:

android - Eclipse 无法识别我的 Android 设备

android - 无法使用 Android Studio - Gradle 1.7 构建 android 项目

c - 这个结构体语法背后的原理是什么?我怎样才能让 Visual Studio 接受它是正确的?

c - 在 C 中使用 win32 在父线程中创建未知数量的子线程?

c - C中的字符串常量和字符串文字有什么区别?

安卓工作室 NDK 等级 : Cannot find share library

c# - 查找位置 MVVMCross 的地址

android - 获取字符串资源的不​​同方式

Android - VideoView 需要按 BACK 两次才能退出

android - 如何修复 android studio 2.3 NDK 错误?