私の JNI コードはchar* src
、外部ソースから を受け取り、それをString
usingjstring 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(最新のもの)を使用しています。
どうぞよろしくお願いいたします。