web-dev-qa-db-ja.com

Androidコンソール表示:W / art:非JNIローカル参照を削除しようとする

最初のCordovaプロジェクトをセットアップし、OneSignal Push通知をインストールしました。これはすべて期待どおりに機能していますが、Android Developer Toolsはコンソールにこれを表示しています:

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

このメッセージは、アプリの実行中に常に出力されます。

それは何を意味し、どのような問題がある場合でもどのように解決できますか?

23
user1532669

エントリはOneSignalとは関係ありません。次のスレッドから、これはWebViewのバグのように見え、Host GPUの使用中に列挙子でより頻繁に発生する可能性がありますisoff。これについては、以下のスレッドを参照してください。

16
jkasten

問題は このChromiumバグ に関連しているようです。バグレポートの引用:

CheckJNIを有効にした最近のバージョンのARTでは、明らかにパラメーターが削除されることはないため、「JNI以外のローカル参照を削除しようとしてスレッドをダンプしています」というログキャットにスパム警告が出力されます。 native-> Java JNI呼び出しからローカル参照として返されるオブジェクト。この場合、ランタイムは何もしないので(警告を出力する以外)、これは実際には問題ではありませんが、checkjniを有効にして開発ビルドを実行したいWebViewを使用するアプリケーションにとってはスパムです。

これは、ホストGPUエミュレーションの問題とは異なります。ホストGPUエミュレーションの問題は、スパムの警告を出して実行するのではなく、アプリをクラッシュさせます。

私はかなり見てきましたが、ARTでCheckJNIを無効にする方法を見つけることができませんでした(Dalvikでも可能です)。私の現在の回避策は、logcatをフィルタリングすることです。これを行うには、logcatウィンドウでAndroid Studioの警告のテキストを選択し、右クリックして[Fold lines like this

17
Samuel Peter

開発者が自分のアプリでこのメッセージを受け取っている場合は、JNIメソッドのパラメーターとして指定されたローカル参照を誤って削除しないようにしてください。

つまり、これをしないでください:

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