【发布时间】:2017-05-15 12:31:41
【问题描述】:
我正在尝试将一些本机 c 库加载到我的 Andoid 应用程序中,但出现以下错误:
应用程序中检测到 JNI 错误:调用 JNI NewGlobalRef 时出现未决异常 java.lang.NoSuchFieldError:“Landroid/os/Parcel;”类中没有“I”字段“mNativePtr”或其超类
这是 logcat 消息的一部分:
05-15 14:08:03.177 21078-21078/fr.limsi.registration A/art: art/runtime/java_vm_ext.cc:410] JNI DETECTED ERROR IN APPLICATION: JNI NewGlobalRef called with pending exception java.lang.NoSuchFieldError: no "I" field "mNativePtr" in class "Landroid/os/Parcel;" or its superclasses
05-15 14:08:03.177 21078-21078/fr.limsi.registration A/art: art/runtime/java_vm_ext.cc:410] at java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader, java.lang.String) (Runtime.java:-2)
05-15 14:08:03.177 21078-21078/fr.limsi.registration A/art: art/runtime/java_vm_ext.cc:410] at java.lang.String java.lang.Runtime.doLoad(java.lang.String, java.lang.ClassLoader) (Runtime.java:435)
05-15 14:08:03.177 21078-21078/fr.limsi.registration A/art: art/runtime/java_vm_ext.cc:410] at void java.lang.Runtime.loadLibrary(java.lang.String, java.lang.ClassLoader) (Runtime.java:370)
05-15 14:08:03.177 21078-21078/fr.limsi.registration A/art: art/runtime/java_vm_ext.cc:410] at void java.lang.System.loadLibrary(java.lang.String) (System.java:1076)
05-15 14:08:03.177 21078-21078/fr.limsi.registration A/art: art/runtime/java_vm_ext.cc:410] at void fr.limsi.registration.utils.NativeInterface.<clinit>() (NativeInterface.java:12)
05-15 14:08:03.177 21078-21078/fr.limsi.registration A/art: art/runtime/java_vm_ext.cc:410] at void fr.limsi.registration.utils.NativeInterface.tangoInitServices() (NativeInterface.java:-2)
05-15 14:08:03.177 21078-21078/fr.limsi.registration A/art: art/runtime/java_vm_ext.cc:410] at void fr.limsi.registration.activities.ProjectViewActivity.onStart() (ProjectViewActivity.java:63)
05-15 14:08:03.177 21078-21078/fr.limsi.registration A/art: art/runtime/java_vm_ext.cc:410] at void android.app.Instrumentation.callActivityOnStart(android.app.Activity) (Instrumentation.java:1238)
05-15 14:08:03.177 21078-21078/fr.limsi.registration A/art: art/runtime/java_vm_ext.cc:410] at void android.app.Activity.performStart() (Activity.java:6302)
我将其解释为:
android.od.Parcel 类没有任何名为“mNativePtr”的字段。
我使用的是联想 PHAB II 平板电脑,运行 Abdroid 6.0 和 art 虚拟机。这是我第一次在 Android 上运行一些本机代码时遇到这个问题,我不明白为什么会收到此消息。当应用程序执行对 System.loadLibrary() 的调用时会发生这种情况,并且应用程序在执行我的本机代码之前崩溃。 有谁有想法吗?
非常感谢!
P.S : 我的 proguard 被禁用了
【问题讨论】:
-
看看this
-
当我尝试加载库时会出现问题,而不是在我使用它时。似乎是 System.loadLibrary() 运行的代码在找到 mNativePtr 时失败了,但根本没有原因。
标签: android android-ndk google-project-tango