Android NDKを使用してAndroidアプリを開発しています。アプリケーションのJNIレイヤーは共有ライブラリ 'libDependentLib.so'に依存します。私android.mkは、次のようになります。Android NDKで従属ライブラリの名前を変更するとUnsatisfiedLinkErrorが発生する
LOCAL_PATH := $(call my-dir)
include $(call all-subdir-makefiles)
include $(CLEAR_VARS)
TARGET_PLATFORM := 'android-10'
LOCAL_CPP_EXTENSION := .cpp
LOCAL_CPPFLAGS += -fno-exceptions -fno-rtti
MY_LOCAL_PATH := $(LOCAL_PATH)/../
LOCAL_LDLIBS := -L$(call host-path, $(MY_LOCAL_PATH)/libs) -lDependentLib
LOCAL_C_INCLUDES := $(MY_LOCAL_PATH)/include-all $(MY_LOCAL_PATH)/include
MY_FILES := abc.cpp xyz.cpp
LOCAL_LDLIBS += -lm -llog -lstdc++
LOCAL_SRC_FILES += $(MY_FILES)
LOCAL_MODULE := jniLayer
include $(BUILD_SHARED_LIBRARY)
LIBSのための私のディレクトリ構造は次のとおりです。
<Android_Project>
|
libs----armeabi-----libjniLayer.so
| |---------libstlport_shared.so
|-----------------libDependentLib.so
私はアプリを実行する前にarmeabiするlibDependentLib.soをコピーするたびに。 libsのロードは次のように行われます:
static {
try {
/* loading the libraries */
System.loadLibrary("stlport_shared");
System.loadLibrary("DependentLib");
System.loadLibrary("jniLayer");
} catch (Throwable th) {
th.printStackTrace();
}
}
これは正常に動作します。しかし、いくつかの要件のために、私はDependentLib_1に外部lib名を変更することを余儀なくされています。私はAndroid.mkで同じ名前を変更しましたが、JavaのlibsとAndroidProjectのライブラリ名を読み込んでいました。しかし、アプリケーションはSystem.loadLibrary( "jniLayer")で失敗します。と言っています
java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1966]:88 could not load needed library 'libDependentLib.so' for 'libjniLayer.so' (load_library[1108]: Library 'libDependentLib.so' not found)
なぜlibDependentLib.soがまだ検索されているのかわかりません。私はlibDependentLib_1.soにすべての名前を変更しました。だから同じものが求められるはずです。 libDependentLib.soが参照されているAndorid.mkとjniローディングは別として? 注:Androidプロジェクトには新しいライブラリが含まれています