【问题标题】:JNI error when trying to access the EXTRA_ADDRESS_BOOK_INDEX field尝试访问 EXTRA_ADDRESS_BOOK_INDEX 字段时出现 JNI 错误
【发布时间】: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


【解决方案1】:

于是我试图解决它,得到同样的错误,然后我搜索了最后一个类ContactsContract的源代码,发现字段EXTRA_ADDRESS_BOOK_INDEX没有在嵌套类中声明数据 但在一个名为 ContactCounts 的嵌套界面中。

所以解决办法是用"android/provider/ContactsContract$ContactCounts"替换"android/provider/ContactsContract$Data"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    相关资源
    最近更新 更多