2015年1月2日金曜日

[Android] [Android Studio] jarだけではなくsoファイルが提供される外部ライブラリをプロジェクトに取り込む方法(バーコード読み取りライブラリ Scanditの例)

[Android] [Android Studio] 外部ライブラリ(jarファイル)をプロジェクトに取り込む方法

では、外部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

だけでなく、環境別のsoファイルが用意されています。このエラーはscanditsdk-androidに同梱されているsoファイルがビルドに組み込まれていないために生じたエラーのようです。

ダウンロードしたScanditのライブラリのjarファイル(scanditsdk-barcodepicker-android-4.3.1.jar)と同階層に存在する、armeabi、armeabi-v7a、x86の3つのディレクトリを./app/src/main/jniLibsに階層をディレクトリ構造を保持したままコピーします(jniLibsはディレクトリは存在していないので、 コピー前に作っておきます)。

この状態で、ビルド&実行したところ、UnsatisfiedLinkErrorが解決して、アプリが動くようになりました。

この方法は、一般的にsoが同梱されるライブラリにて同様に使える方法のようです。Scanditの用にsoファイルが提供されるライブラリの取り込み方を整理すると、


  1. jarファイルを./app/libs/にコピーする
  2. 「Project with Gradle Files」を実行する
  3. ./app/src/main/jniLibsディレクトリを作成する
  4. 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 件のコメント:

コメントを投稿