既存のC++コードベースにJNIインターフェイスを構築しようとしています。私は正常に私のJNI関数の.soファイルを構築し、正常にJavaコード内からその関数を呼び出すことができます。Android上のJNIライブラリから事前構築された共有ライブラリを参照する
libpng(NDKツールチェーンで.soファイルにコンパイルされた)関数を呼び出す次の手順に進むと、JNI関数に関連付けられた共有ライブラリを正常に構築できます。 .MKファイルによってlibpng12.soがlibs/armeabiディレクトリにコピーされます。
エミュレータにアプリケーションをデプロイすると、/ dataの下のアプリケーションフォルダのlibディレクトリにJNI .soとlibpng.soの両方が配置されます。私のJNIライブラリのSystem.loadLibraryを呼び出すと、そのコードはアプリケーションのlibディレクトリにあります。
しかし、コードがlibpng.soファイルにアクセスしようとするとUnsatisfiedLinkErrorが返されます。エミュレータでstraceを使用すると、JNIライブラリがロードされたのと同じ場所からではなく、/ system/libからlibpng.soをロードしようとしていることがわかります。
参照されるライブラリがどこから読み込まれるかを制御する方法はありますか?/system/libにインストールする必要はないようです。アプリケーションを配備すると参照される.soファイルがアプリのlibディレクトリに置かれるという事実は、そこに見つかることを示しているようです。 LOCAL_PATH::= $(私の-DIRを呼び出す)任意の助けを事前に
include $(CLEAR_VARS)
LOCAL_MODULE := png12
LOCAL_SRC_FILES := libpng12.so
LOCAL_EXPORT_C_INCLUDES := /home/jipping/libpng-1.2.44
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := PNGLib
LOCAL_SRC_FILES := PNGLib.cpp
LOCAL_SHARED_LIBRARY := png12
LOCAL_LDLIBS := -L/cygdrive /c/Users/mcfall/workspace/AndroidCalculator/jni -lpng12
LOCAL_C_INCLUDES := /home/mcfall/libpng-1.2.44
include $(BUILD_SHARED_LIBRARY)
おかげで、それは価値がある何のため
は、ここで私たちが使用しているの.mkファイルです。