【问题标题】:Android NDK can't find JNI_GetCreatedJavaVMs after update from r6 to r7从 r6 更新到 r7 后,Android NDK 找不到 JNI_GetCreatedJavaVM
【发布时间】:2011-11-16 02:38:35
【问题描述】:

我已将我的 NDK 版本从 r6 更新到 r7。之后,在编译我的一个本机文件时出现此错误:

错误:“JNI_GetCreatedJavaVMs”未在此范围内声明

我正在为 API 级别 8 (Android 2.2) 构建我的项目。我已经检查了

(MY_NDK_PATH_R6)/android-8/arch-arm/usr/include/jni.h

GetCreatedJavaVMs 被声明并且文件jni.h 实际上是一个符号链接到

(MY_NDK_PATH_R6)/platforms/android-3/arch-arm/usr/include/jni.h

然后我检查了

(MY_NDK_PATH_R7)/platforms/android-8/arch-arm/usr/include/jni.h

它实际上是一个文件,而不是符号链接。

我正在使用 Eclipse 构建我的项目,我在首选项中指定的唯一内容是ndk-build 的路径。

编辑:好的,现在很清楚为什么找不到 GetCreatedJavaVMs:

/*
 * 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

但是在这种情况下我应该如何获取虚拟机呢?

【问题讨论】:

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


    【解决方案1】:

    我找到了解决方案。 您只需要实现 JNI_OnLoad(JavaVM* vm, void* reserved) 函数。 JVM是一个论据。 可能这是获取 JVM 的更好方法。

    【讨论】:

    • 这是一个很好的观察。我发现将它保存在静态变量中并在需要时重新使用它是很划算的。
    猜你喜欢
    • 2012-02-10
    • 2012-09-11
    • 2014-05-30
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 2012-04-16
    • 1970-01-01
    相关资源
    最近更新 更多