JNI DETECTED ERROR IN APPLICATION|Android開発
JNIの実行時に
Call<type>Method
などでtype部分の型を正しく指定しない場合にJNI DETECTED ERROR IN APPLICATIONが発生することがあります。
これは主にAndroid 5.0 LollipopからJNI層でJavaのライブラリ関数をコールするための指定が厳密になったためのようです。
例えば、Lollipop以前では、
CallStaticBooleanMethod()
としなければならない箇所で、
(jboolean)CallStaticIntMethod()
としてもコールできていました。これが駄目になっています。
要は正しい型のメソッドを指定しろって事ですね。
また、GetMethodID
などの引数でメソッドのシグネチャやクラス名を指定する際、名前空間の区切りとして、以前は.
(カンマ)もOKでしたが、必ず/
区切りで記述しなければいけません。
まとめ
Lollipop以前
どちらでもOKだった。
"()Ljava.lang.String;"
"()Ljava/lang/String;"
Lollipop以降
下記しか駄目。
"()Ljava/lang/String;"