Я занимаюсь разработкой приложения для Android с использованием Android NDK. Уровень JNI приложения зависит от общей библиотеки libDependentLib.so. Мой android.mk выглядит так:
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)
Моя структура каталогов для библиотек:
<Android_Project>
|
libs----armeabi-----libjniLayer.so
| |---------libstlport_shared.so
|-----------------libDependentLib.so
Каждый раз, когда я копирую libDependentLib.so в armeabi перед запуском приложения. Загрузка библиотек выполняется как:
static {
try {
/* loading the libraries */
System.loadLibrary("stlport_shared");
System.loadLibrary("DependentLib");
System.loadLibrary("jniLayer");
} catch (Throwable th) {
th.printStackTrace();
}
}
Это работает нормально. Но из-за некоторых требований я вынужден изменить имя внешней библиотеки на DependentLib_1. Я переименовал то же самое в Android.mk, загружая библиотеки в java и имя библиотеки в 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. Так что то же самое следует искать. Помимо загрузки Andorid.mk и jni, где упоминается libDependentLib.so?
Примечание: проект Android содержит новую библиотеку lib