【发布时间】:2018-07-16 17:38:36
【问题描述】:
我有一个 Android 应用程序,在该应用程序启动时调用以下 C 方法(在Activity.onCreate 中)。
extern "C"
JNIEXPORT jstring JNICALL
Java_com_google_oboe_test_oboetest_MainActivity_stringFromJNI(
JNIEnv *env,
jobject instance) {
jclass sysclazz = env->FindClass("java/lang/System");
jmethodID getPropertyMethod = env->GetStaticMethodID(sysclazz, "getProperty", "(Ljava/lang/String;)Ljava/lang/String;");
jstring result = (jstring) env->CallStaticObjectMethod(sysclazz, getPropertyMethod, "os.name");
return result;
}
当调用此方法时,应用程序崩溃并出现错误:
应用程序中检测到 JNI 错误:使用已删除的本地引用 0xd280e8d5
单步调试显示这行导致崩溃:
jstring result = (jstring) env->CallStaticObjectMethod(sysclazz, getPropertyMethod, "os.name");
是什么导致了这个错误?以及如何使用 JNI 调用 System.getProperty("os.name") 而不会出现此错误?
【问题讨论】:
标签: java android c jvm java-native-interface