web-dev-qa-db-fra.com

Android affiche: W / art: tentative de suppression de la référence locale non JNI

Je viens de configurer mon premier projet Cordova et d'installer les notifications OneSignal Push. Tout cela fonctionne comme je m'y attendais, cependant les outils de développement Android Android le montrent dans la console:

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

Ce message est constamment émis pendant que l'application est en cours d'exécution.

Qu'est-ce que cela signifie et comment puis-je résoudre n'importe quel problème?

23
user1532669

Les entrées ne sont pas liées à OneSignal. D'après les threads suivants, cela semble être un bogue avec WebView et peut se produire plus souvent sur les énumérateurs lors de l'utilisation de Host GPU est désactivé . Voir les discussions ci-dessous à ce sujet.

16
jkasten

Il semble que le problème soit lié à ce bug Chromium . Citant le rapport de bogue:

Sur les versions récentes d'ART avec CheckJNI activé, cela provoque l'impression d'un avertissement de spam dans logcat indiquant "Tentative de suppression de la référence locale non JNI, vidage du fil" avec un vidage du fil, car apparemment les paramètres ne sont pas censés être supprimés, seulement objets renvoyés en tant que références locales à partir d'appels JNI natifs-> Java. Ce n'est pas réellement un problème car le runtime ne fait rien dans ce cas (autre que l'impression de l'avertissement), mais c'est du spam pour les applications utilisant la visualisation Web qui peuvent vouloir exécuter des builds de développement avec checkjni activé.

Ceci est différent du problème d'émulation du GPU hôte, qui ferait planter l'application au lieu de la laisser s'exécuter avec des avertissements de spam.

J'ai regardé un peu, mais je n'ai pas trouvé de moyen de désactiver CheckJNI sur ART (même si c'est possible pour Dalvik). Ma solution de contournement actuelle consiste à filtrer le logcat. Pour ce faire, sélectionnez le texte de l'avertissement dans la fenêtre logcat de Android Studio, puis cliquez dessus avec le bouton droit et choisissez Fold lines like this.

17
Samuel Peter

Si vous êtes un développeur qui reçoit ce message dans votre propre application, assurez-vous de ne pas supprimer accidentellement les références locales données en tant que paramètres à vos méthodes JNI.

c'est-à-dire ne faites pas ceci:

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