nativo Pantallas de la consola de Android: W/art: Intento de eliminar la referencia local que no es JNI




jni android studio (3)

Si eres un desarrollador que recibe este mensaje en tu propia aplicación, asegúrate de no eliminar accidentalmente las referencias locales dadas como parámetros a tus métodos JNI.

es decir, no hagas esto:

JNIEXPORT void JNICALL Java_my_app_MyClass_myMethod
    (JNIEnv* env, jobject self, jobject someParam) {
    env->DeleteLocalRef(someParam);
}

Acabo de configurar mi primer proyecto de Cordova e instalé notificaciones push de OneSignal. Todo esto está funcionando como esperaba, sin embargo, las herramientas de desarrollo de Android lo muestran en la consola:

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

Este mensaje se envía constantemente mientras se ejecuta la aplicación.

¿Qué significa y cómo puedo resolver cualquier problema que haya?


Answer #1

Parece que el problema está relacionado con este error de Chromium . Citando el informe de error:

En las versiones recientes de ART con CheckJNI activado, esto hace que se imprima una advertencia de spam en Logcat que indique "Intento de eliminar una referencia local que no sea JNI, volcando el hilo" con un volcado de hilos, ya que aparentemente los parámetros no deben borrarse, solo objetos devueltos como referencias locales de llamadas JNI nativas -> java. Esto no es realmente un problema ya que el tiempo de ejecución no hace nada en este caso (aparte de imprimir la advertencia), pero es spam para las aplicaciones que usan webview que pueden querer ejecutar versiones de desarrollo con checkjni habilitado.

Esto es diferente del problema de emulación de GPU del host, que podría bloquear la aplicación en lugar de dejar que se ejecute con advertencias de spam.

He buscado bastante, pero no pude encontrar una manera de deshabilitar CheckJNI en ART (a pesar de que es posible para Dalvik). Mi solución actual es filtrar el logcat. Para hacer esto, seleccione el texto de la advertencia en la ventana logcat de Android Studio, luego haga clic derecho y elija Fold lines like this .






logcat