Android控制台显示:W/art:尝试删除非JNI本地引用

use*_*669 23 android logcat cordova android-studio

我刚刚设置了我的第一个Cordova项目并安装了OneSignal推送通知.这一切都按照我的预期运行,但Android开发人员工具在控制台中显示:

W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
I/art: WaitForGcToComplete blocked for 6.202ms for cause Background
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
W/art: Attempt to remove non-JNI local reference, dumping thread
Run Code Online (Sandbox Code Playgroud)

应用程序运行时会不断输出此消息.

它是什么意思,如何解决任何问题?

Sam*_*ter 17

似乎这个问题与这个Chromium bug有关.引用错误报告:

在最近的版本ART与CheckJNI开启,这会导致打印到logcat的说明"尝试删除非JNI本地参考,倾线"与线程转储垃圾警告,因为显然是不应该的参数被删除,只从native-> java JNI调用作为本地引用返回的对象.这实际上不是一个问题,因为运行时在这种情况下什么都不做(除了打印警告),但对于webview使用的应用程序来说,这可能是想要运行启用了checkjni的开发构建的垃圾邮件.

这与主机GPU仿真问题不同,后者会使应用程序崩溃而不是让它与垃圾邮件警告一起运行.

我看起来相当多,但无法找到一种方法来禁用ART上的CheckJNI(即使Dalvik有可能).我目前的解决方法是过滤logcat.为此,请在Android Studio的logcat窗口中选择警告文本,然后右键单击并选择Fold lines like this.


jka*_*ten 16

这些条目与之无关OneSignal.从下面的线程这看起来是同一个错误WebView,同时使用可枚举更经常发生的host GPU关闭.请参阅下面提到的线程.


CJx*_*JxD 5

如果您是在自己的应用程序中收到此消息的开发人员,请确保您没有意外删除作为 JNI 方法参数提供的本地引用。

即不要这样做:

JNIEXPORT void JNICALL Java_my_app_MyClass_myMethod
    (JNIEnv* env, jobject self, jobject someParam) {
    env->DeleteLocalRef(someParam);
}
Run Code Online (Sandbox Code Playgroud)