JNI DETECTED ERROR IN APPLICATION|Android開発

      2018/06/15

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;"

 - Android