Android Studio使っていてJNIのSystem.loadLibraryでエラー
JNIで使う.soライブラリが見つからなかったりすると次のようなエラーが出ます。
java.lang.UnsatisfiedLinkError: Couldn't load PQAMakerJNI from loader dalvik.system.PathClassLoader: findLibrary returned null at java.lang.Runtime.loadLibrary(Runtime.java:358) at java.lang.System.loadLibrary(System.java:526)
でもndk-build
してちゃんと.soファイルは生成できているはず。
そんなときは、ライブラリの場所がコンパイラにちゃんと伝わっていないのが原因かもしれません。
たぶん.soファイルは/[app]/src/main/libs
に生成されているかと思います。
しかし、デフォルトの設定でライブラリを探す場所は/[app]/src/main/jniLibs
です。
OpenCVなどで静的ライブラリを利用するときはここに配置するかと思います。
解決策は以下の2つあります。
build.gradle
をいじってsrc/main/libs
からも探すようにするsrc/main/libs
以下のファイルをsrc/main/jniLibs
にコピーする
1つ目の方を詳しく説明すると、以下のようにjniLibs.srcDirs
を変更すればOKです。
build.gradle
apply plugin: 'com.android.application' android { ... sourceSets { main { jni.srcDirs = [] jniLibs.srcDirs = ['src/main/libs', 'src/main/jniLibs'] // Here! } } } dependencies { ... }