では、外部jarファイルをapp/libs/に置いて、syncすればよいと書きました。しかし、私用でバーコード読み取り機能を実装するにあたって、Scanditというライブラリを組み込んでみた所、jarファイルの取り込みだけではどうしてもエミュレータ、実機で
java.lang.UnsatisfiedLinkError: Couldn't load scanditsdk-android-4.3.1
という実行エラーが表示され、アプリが実行できませんでした。
Scanditのライブラリはjarファイル
./app/libs/scanditsdk-barcodepicker-android-4.3.1.jar
ダウンロードしたScanditのライブラリのjarファイル(scanditsdk-barcodepicker-android-4.3.1.jar)と同階層に存在する、armeabi、armeabi-v7a、x86の3つのディレクトリを./app/src/main/jniLibsに階層をディレクトリ構造を保持したままコピーします(jniLibsはディレクトリは存在していないので、 コピー前に作っておきます)。
この状態で、ビルド&実行したところ、UnsatisfiedLinkErrorが解決して、アプリが動くようになりました。
この方法は、一般的にsoが同梱されるライブラリにて同様に使える方法のようです。Scanditの用にsoファイルが提供されるライブラリの取り込み方を整理すると、
- jarファイルを./app/libs/にコピーする
- 「Project with Gradle Files」を実行する
- ./app/src/main/jniLibsディレクトリを作成する
- jniLibsディレクトリにsoファイルをディレクトリ構造を保ったままコピーする。(aaa/bbb.soなら、jniLibs/aaa/sss.soになるようにコピーする)
以上です。
参考:
Adding a .so file in Android Studio
Include .so library in apk in android studio
0 件のコメント:
コメントを投稿