AndroidStudioで.soファイルを追加する設定方法

ネイティブのライブラリを使用しているとあるプロジェクトをEclipseからAndroidStudioに手動で移行する際、ビルドは通るけど端末で実行時にエラーが出てアプリが強制終了するという現象が発生した。

ネイティブライブラリを使ったプロジェクトの移行時によくあるハマりどころみたいなので、対策方法をメモっておく。

スポンサーリンク

UnsatisfiedLinkError

アプリが強制終了した際のログを確認するとjava.lang.UnsatisfiedLinkError: Native method not found:と出力されていた。

UnsatisfiedLinkErrorというのは初めて見たが、どうやらネイティブライブラリのリンクにミスっているせいで、ネイティブメソッドを呼び出している箇所で落ちているらしい。

ネイティブライブラリ(.soファイル)がプロジェクトに追加できていることは確認済みなので、恐らくbuild.gradleの設定が間違ってるんだろうと思ってググってみると同じ現象で困っている人の相談が大量に見つかった。

原因はやはりbuild.gradeの設定が間違っているということで、以下のように記述して適切なフォルダ構成にすることでビルド時にちゃんとネイティブライブラリが含まれて、実行時エラーが発生しなくなった。

main以下にjniLibsフォルダを作成し、その中にフォルダ構成を維持したまま各プラットフォームごとの.soファイルを追加してやると、無事に.soファイルがビルド生成物に含まれるようになる。最終的なフォルダ構成はmain/jniLibs/armeabi/hoge.soみたいな感じ。

ちなみに上記の設定はjniLibs.srcDirsに配列をセットしていることから察しがつくとおり、複数のディレクトリを指定することができるようである。また任意の値をセットすることでjniLibs以外の任意のフォルダを指定することもできるらしい。

ただ基本的には標準構成どおりにjniLibsフォルダにまとめておくのが無難ですかね。

参考
Android Studio – Native method not found – Include .so file in build

スポンサーリンク

シェアする

フォローする