NativeScript / NativeScript/android

JNI Exception when accessing static fields of some Android classes

Open
#728 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug severity: low
Dominant language
C++
Stars
563
Forks
144
Avg merge
10h 46m
Merged PRs (30d)
14

Description

Tell us about the problem

Attempting to access some static constants of certain classes will result in the following exception:
JNI DETECTED ERROR IN APPLICATION: static jfieldID X not valid for class Y

Known conflicting classes and fields:

Please provide the following version numbers that your issue occurs with:
  • Runtime(s): 2.5
Did the error happen while the app was being constructed? (buildtime error)

C++ Stacktrace

03-20 10:08:31.054 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410] JNI DETECTED ERROR IN APPLICATION: static jfieldID 0x707ff280 not valid for class java.lang.Class<android.provider.ContactsContract$Data>
03-20 10:08:31.054 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]     in call to GetStaticObjectField
03-20 10:08:31.054 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]     from java.lang.Object com.tns.Runtime.callJSMethodNative(int, int, java.lang.String, int, boolean, java.lang.Object[])
03-20 10:08:31.054 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410] "main" prio=5 tid=1 Runnable
03-20 10:08:31.054 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   | group="main" sCount=0 dsCount=0 obj=0x740842a0 self=0xb4cf6500
03-20 10:08:31.054 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   | sysTid=14495 nice=0 cgrp=default sched=0/0 handle=0xb6f04b34
03-20 10:08:31.054 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   | state=R schedstat=( 1323742611 224979275 776 ) utm=106 stm=26 core=0 HZ=100
03-20 10:08:31.054 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   | stack=0xbe7d4000-0xbe7d6000 stackSize=8MB
03-20 10:08:31.054 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   | held mutexes= "mutator lock"(shared held)
03-20 10:08:31.054 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   native: #00 pc 00370e01  /system/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, int, char const*, art::ArtMethod*, void*)+160)
03-20 10:08:31.054 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   native: #01 pc 0035046f  /system/lib/libart.so (art::Thread::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) const+150)
03-20 10:08:31.054 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   native: #02 pc 0025a725  /system/lib/libart.so (art::JavaVMExt::JniAbort(char const*, char const*)+740)
03-20 10:08:31.054 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   native: #03 pc 0025adfd  /system/lib/libart.so (art::JavaVMExt::JniAbortV(char const*, char const*, std::__va_list)+64)
03-20 10:08:31.054 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   native: #04 pc 000fd1d1  /system/lib/libart.so (art::ScopedCheck::AbortF(char const*, ...)+32)
03-20 10:08:31.054 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   native: #05 pc 00114ab1  /system/lib/libart.so (art::ScopedCheck::CheckFieldAccess(art::ScopedObjectAccess&, _jobject*, _jfieldID*, bool, art::Primitive::Type)+452)
03-20 10:08:31.054 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   native: #06 pc 001164d5  /system/lib/libart.so (art::CheckJNI::GetField(char const*, _JNIEnv*, _jobject*, _jfieldID*, bool, art::Primitive::Type)+524)
03-20 10:08:31.054 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   native: #07 pc 00116a6f  /system/lib/libart.so (art::CheckJNI::GetStaticObjectField(_JNIEnv*, _jclass*, _jfieldID*)+30)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   native: #08 pc 00501870  /data/app/com.tns.android_runtime_testapp-1/lib/arm/libNativeScript.so (_JNIEnv::GetStaticObjectField(_jclass*, _jfieldID*)+60)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   native: #09 pc 00501818  /data/app/com.tns.android_runtime_testapp-1/lib/arm/libNativeScript.so (tns::JEnv::GetStaticObjectField(_jclass*, _jfieldID*)+56)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   native: #10 pc 0048bea4  /data/app/com.tns.android_runtime_testapp-1/lib/arm/libNativeScript.so (tns::FieldAccessor::GetJavaField(v8::Isolate*, v8::Local<v8::Object> const&, tns::FieldCallbackData*)+7292)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   native: #11 pc 0035e70c  /data/app/com.tns.android_runtime_testapp-1/lib/arm/libNativeScript.so (tns::CallbackHandlers::GetJavaField(v8::Isolate*, v8::Local<v8::Object> const&, tns::FieldCallbackData*)+56)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   native: #12 pc 0042483c  /data/app/com.tns.android_runtime_testapp-1/lib/arm/libNativeScript.so (tns::MetadataNode::FieldAccessorGetterCallback(v8::Local<v8::String>, v8::PropertyCallbackInfo<v8::Value> const&)+2052)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   native: #13 pc 007ac9b7  /data/app/com.tns.android_runtime_testapp-1/lib/arm/libNativeScript.so (???)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   native: #14 pc 0084fd1f  /data/app/com.tns.android_runtime_testapp-1/lib/arm/libNativeScript.so (v8::internal::Object::GetPropertyWithAccessor(v8::internal::LookupIterator*)+262)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   native: #15 pc 0086c79b  /data/app/com.tns.android_runtime_testapp-1/lib/arm/libNativeScript.so (v8::internal::Object::GetProperty(v8::internal::LookupIterator*)+186)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   native: #16 pc 007b0859  /data/app/com.tns.android_runtime_testapp-1/lib/arm/libNativeScript.so (v8::internal::LoadIC::Load(v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Name>)+84)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   native: #17 pc 007b370f  /data/app/com.tns.android_runtime_testapp-1/lib/arm/libNativeScript.so (v8::internal::Runtime_LoadIC_Miss(int, v8::internal::Object**, v8::internal::Isolate*)+478)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   native: #18 pc 00000098   (???)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   at com.tns.Runtime.callJSMethodNative(Native method)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   at com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1021)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   at com.tns.Runtime.callJSMethodImpl(Runtime.java:903)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   at com.tns.Runtime.callJSMethod(Runtime.java:890)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   at com.tns.Runtime.callJSMethod(Runtime.java:874)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   at com.tns.Runtime.callJSMethod(Runtime.java:866)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   at com.tns.gen.android.view.View_OnClickListener.onClick(android.view.View$OnClickListener.java:-1)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   at android.view.View.performClick(View.java:5204)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   at android.view.View$PerformClick.run(View.java:21153)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   at android.os.Handler.handleCallback(Handler.java:739)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   at android.os.Handler.dispatchMessage(Handler.java:95)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   at android.os.Looper.loop(Looper.java:148)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   at android.app.ActivityThread.main(ActivityThread.java:5417)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   at java.lang.reflect.Method.invoke!(Native method)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410]   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
03-20 10:08:31.055 14495-14495/com.tns.android_runtime_testapp A/art: art/runtime/java_vm_ext.cc:410] 
Did the error happen while the app was executing? (runtime error)

Yes.

Please tell us how to recreate the issue in as much detail as possible.

accessing android.provider.ContactsContract.Data.EXTRA_ADDRESS_BOOK_INDEX anywhere in code crashes the app.

Tested on Genymotion Emulators: API 21, API 23
Tested on Real Nexus 5 Device: API 23

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the crash on Android API 21 or 23 using ContactsContract.Data.EXTRA_ADDRESS_BOOK_INDEX, then trace the JNI access from tns::FieldAccessor::GetJavaField through GetStaticObjectField and Runtime.java. Done means the listed static fields no longer trigger the JNI DETECTED ERROR while preserving access to their values.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, cpp
Domain
mobile-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.