開発のヒホ

iOSとかAndroidとかのアプリを開発するのに四苦八苦するブログ

Android NDKでjava.lang.UnsatisfiedLinkError

 Android NDK、いいですよね。
 でもいろいろとエラー(特にコンパイルエラー)が出てきて大変です。

 今回は実行時エラーが出ました。
 java.lang.UnsatisfiedLinkErrorです。

 このエラーはライブラリを読み込むのを忘れていたり
 関数名を間違えていたりすると発生するようです。

 今回はLibraryNotFoundではなく「関数が見つからない」という内容でだったため前者とは違い、
 NDK用の関数を自動生成していたので後者のと同じ可能性もありませんでした。

 いろいろ調べていた結果、nativeメソッドの宣言をstaticにしていたために関数が自動生成されていなかったのが原因だったようです。

// bef
public native void yourMethod() ;

// aft
static public native void yourMethod() ;

 staticだと便利だったのですが、生成はstaticを外す必要があるようです。
 関数を生成し終わった後はstaticにしても大丈夫っぽいです。

 詳しく知らないでなんとなくコード書いてるからこんなエラーに遭遇するんです。
 ちゃんと一から勉強するか、諦めるかしかないですね。