我创建了一个使用NDK的Android应用程序。 在jni目录下,我有一堆C ++文件和C目录下的.c和.h文件。我使用swig工具通过C ++代码创建了JNI接口。到现在为止还挺好。 应用程序正在编译文件,我能够运行应用程序并从C ++类调用API。
现在我想使用.c和.h文件创建一个静态库,并将其包含在我的Android.mk中,而不是将所有文件编译成单个.so文件。 我创建了一个新的Android.mk文件并包含.c并创建了一个静态库。 当我编译代码时,我可以看到.a文件被创建。
我将以下行包含在jni目录下的Android.mk文件中。
include $(call all-subdir-makefiles)
...从LOCAL_SRC_FILES变量中删除.c文件。
LOCAL_STATIC_LIBRARIES += libhello
经过这种变化, 我可以编译代码并启动应用程序。但是当我从C ++类调用API时(之前工作的函数相同),现在应用程序崩溃并出现异常 java.lang.UnsatisfiedLinkError:未找到任何实现
仍然应用程序失败并出现相同的异常。 感谢有人可以帮我解决这个问题。
谢谢, Ajala
我正在为项目提供Android.mk文件内容
/*********************************************/
LOCAL_PATH := $(call my-dir)
MY_PATH := $(LOCAL_PATH)
include $(call all-subdir-makefiles)
include $(CLEAR_VARS)
LOCAL_MODULE := SWIGCPlusTester
LOCAL_CPP_EXTENSION := .cxx .cpp
MY_LOCAL_SRC_FILES :=
$(wildcard $(MY_PATH)/*.cpp)
MY_LOCAL_SRC_FILES := \
$(wildcard $(MY_PATH)/*.cxx)
LOCAL_SRC_FILES := \
$(subst jni/, , $(MY_LOCAL_SRC_FILES))
LOCAL_LDLIBS :=-llog
LOCAL_STATIC_LIBRARIES := libhello
include $(BUILD_SHARED_LIBRARY)
/*********************************************/
我还附加了“C”目录中的Android.mk文件内容。
/*********************************************/
LOCAL_PATH := $(call my-dir)
LOCAL_PATH_INCLUDE := $(LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.c
include $(BUILD_STATIC_LIBRARY)
/*********************************************/
我根据示例https://code.google.com/p/razzlegames-android-ndk-tutorial/创建了mk文件 希望这些信息有助于确定问题。