【发布时间】:2018-05-25 07:47:15
【问题描述】:
我正在尝试使用 JNI 访问 EXTRA_ADDRESS_BOOK_INDEX 常量:
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {
JNIEnv* env = nullptr;
vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6);
jclass clazz = env->FindClass("android/provider/ContactsContract$Data");
jfieldID fieldID = env->GetStaticFieldID(clazz, "EXTRA_ADDRESS_BOOK_INDEX", "Ljava/lang/String;");
jobject field = env->GetStaticObjectField(clazz, fieldID);
}
GetStaticObjectField 方法因错误而崩溃:
java_vm_ext.cc:534] JNI 检测到应用程序错误:静态 jfieldID 0x6fd191b0 对类无效 java.lang.Class
另一方面,如果我尝试访问同一类的 VISIBLE_CONTACTS_ONLY 字段,一切都会按预期进行:
jfieldID fieldID = env->GetStaticFieldID(clazz, "VISIBLE_CONTACTS_ONLY", "Ljava/lang/String;");
任何线索我可能做错了什么?
【问题讨论】:
-
你使用的api级别是多少?
-
我正在 x86 Android Emulator API Level 27 (Android 8.1 - Google APIs) 上对此进行测试。还在 Genymotion 模拟器上进行了测试:API 21、API 23 和真正的 Nexus 5 设备:API 23
标签: java android android-ndk java-native-interface