我创建了一个.so文件,它通过JNI公开对Java的本机C调用。这很好用,如果我只在我的C代码中使用系统库,我可以将应用程序部署到我的Android系统上。但是,如果我想调用其他.so文件中的函数,我无法正确链接我的项目。
例如,假设我有“libotherso.so”文件,其中包含C中定义的API,我可以从我用来生成“libMyJNILibrary.so”的“MyJNILibrary.c”代码中调用它。
我尝试按如下方式更改Android.mk文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := MyJNILibrary
LOCAL_SRC_FILES := MyJNILibrary.c
LOCAL_LDLIBS += -lotherso
include $(BUILD_SHARED_LIBRARY)
但是当我在这上面调用ndk-build时,我发现-lotherso会出错。我在哪里放“libotherso.so”文件,以便ndk-build可以拿起它?
感谢您提供的任何帮助。
答案 0 :(得分:5)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := otherso
LOCAL_SRC_FILES := ../lib/libotherso.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := MyJNILibrary
LOCAL_SRC_FILES := MyJNILibrary.c
LOCAL_SHARED_LIBRARIES := otherso
include $(BUILD_SHARED_LIBRARY)
请注意,LOCAL_SRC_FILES是相对于您的LOCAL_PATH。
不要忘记在自己的JNI库之前加载依赖项:
static {
System.loadLibrary("otherso");
System.loadLibrary("MyJNILibrary");
}