尝试访问EXTRA_ADDRESS_BOOK_INDEX字段时出现JNI错误

Dar*_*rov 5 java java-native-interface android android-ndk

我正在尝试EXTRA_ADDRESS_BOOK_INDEX使用JNI 访问常量:

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);
}
Run Code Online (Sandbox Code Playgroud)

GetStaticObjectField方法崩溃并显示错误:

java_vm_ext.cc:534]应用程序中JNI检测到错误:静态jfieldID 0x6fd191b0对类java.lang.Class <android.provider.ContactsContract $ Data>无效

另一方面,如果我尝试访问VISIBLE_CONTACTS_ONLY同一类的字段,那么一切都会按预期进行:

jfieldID fieldID = env->GetStaticFieldID(clazz, "VISIBLE_CONTACTS_ONLY", "Ljava/lang/String;");
Run Code Online (Sandbox Code Playgroud)

任何提示我可能做错了什么?

E.A*_*del 3

所以我尝试解决它并得到相同的错误,然后我搜索了最终类ContactsContract的源代码,发现该字段EXTRA_ADDRESS_BOOK_INDEX不是在嵌套类Data中声明的,而是在名为ContactCounts的嵌套接口中声明的。

所以解决方案是替换"android/provider/ContactsContract$Data""android/provider/ContactsContract$ContactCounts"