JNI を使用するライブラリを使用しようとしています。
開発者が提供するサンプルアプリを試してみましたが、うまくいきました。だから私はそれがライブラリのバグではないことを知っています。
ライブラリをインポートする過程で何か間違ったことをしていると思います:
- .so ファイルを libs フォルダー (libjniRTSP.so と呼ばれる) にコピーします。
jniRTSP.java (以下に要約) をプロジェクトにコピーします。
public class jniRTSP { private volatile static jniRTSP libRTSP = null; public static jniRTSP getInstance() { if(null == libRTSP) { synchronized(jniRTSP.class) { if(null == libRTSP) { libRTSP = new jniRTSP(); libRTSP.InitProductList(); // DEBUG libRTSP.SetDebugView(1); } } } return libRTSP; } static { try { System.loadLibrary("jniRTSP"); } catch (Exception e) { e.printStackTrace(); } } public native int GetBrandEnableRecorder(); public native int GetBrandEnableLocal(); public native int GetBrandEnableRemote(); ...
次に、 onCreate() でメソッドの 1 つを呼び出そうとします。
jniRTSP.getInstance().Init(.....)
エラーを返します:
UnsatisfiedLinkError: ネイティブ メソッドが見つかりません com.myuniquepackage.jniRTSP.InitProductList:()I
更新 (修正): jniRTSP Java ファイルをコピーするだけでなく、それを含むパッケージ全体を同じパッケージ名のままコピーしました。パッケージ名が問題だったためにこれが修正されたのか、それともそのパッケージに含まれていた他のJavaファイルの1つが必要だったのかはわかりません。ファイルが見つからない場合はかなり確信がありますが、コンパイル時に文句を言うでしょう。