1

私の JNI コードはchar* src、外部ソースから を受け取り、それをStringusingjstring jStr = env->NewStringUTF(src)に変換し、結果jStrを上位の Java レイヤーに渡します。

一部の入力src値によって、次のランタイム エラーが発生します ( への呼び出し内NewStringUTF)。

A/art: art/runtime/java_vm_ext.cc:470] JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal start byte 0xf8
A/art: art/runtime/java_vm_ext.cc:470]     string: 'radio abcdefg ���� ����� ��� ����'
A/art: art/runtime/java_vm_ext.cc:470]     input: '0x72 0x61 0x64 0x69 0x6f 0x20 0x62 0x72 0x65 0x73 0x6c 0x65 0x76 0x20 <0xf8> 0xe3 0xe9 0xe5 0x20 0xe1 0xf8 0xf1 0xec 0xe1 0x20 0xf7 0xe5 0xec 0x20 0xe4 0xf0 0xe7 0xec'
A/art: art/runtime/java_vm_ext.cc:470]     in call to NewStringUTF

私が使用したメソッドはどれも、このNewStringUTFエラー/例外を「キャッチ」できませんでした:

  • if (env->ExceptionCheck() == JNI_TRUE)通話後に配置しNewStringUTFます。
  • if (env->ExceptionOccurred())通話後に配置しNewStringUTFます。
  • NewStringUTFへの呼び出しをtry...catchブロックで境界付けます。

注:質問は、例外をキャッチすることに焦点を当てています(そして、その影響を制御することによって、アプリケーションをクラッシュさせません)。必ずしもそれを解決することではありません (役に立つかもしれませんが)。

私はAndroid Studio v2.3.3とNDK v15.2(最新のもの)を使用しています。

どうぞよろしくお願いいたします。

4

1 に答える 1