Edited at

Unity4.5以降、Android Shared Libraryが使えなくなる問題とその対応

More than 3 years have passed since last update.

Unityを4.5にアップグレードしたところ、今まで使えていた Android Shared Library が突然使えなくなりました。

エラーの内容は様々ですが、主に


  • 実機端末で発生する

  • Unable to find (ライブラリ名) というエラーが出る

  • DllNotFoundExceptionが発生する

というものです。

以下のページに解決のヒントがありました。

DllNotFoundException, prefectly worked before Unity 4.5

まず、Android側の仕様として、Shared Libraryのファイル名は "lib" で始まり、".so" で終わる必要があります。

次に、Unity側の仕様として、DllImportを記述する際には頭の "lib" と終端の ".so" を除いたものを指定する必要があります。

こちらのページにもハッキリと記載がありますね。

Androidのプラグインをビルドする / Building Plugins for Android

Unity4.5より前のバージョンではこの辺りのルールが緩かったようで、


import.cs

[DllImport("libhoge")]


のように記述してもライブラリがインポートされていましたが、Unity4.5以降ではこの辺りのルールが厳格になり、インポートに失敗するようになります。

自分のケースはまさにこれで、


  • ライブラリ名は「libhoge.so」だった

  • [DllImport("libhoge")] と記述していた

のが災いしました。

解決方法としては、前述のルールに沿うように


import.cs

[DllImport("hoge")]


と修正したところ、動くようになりました。