我有一个共享库libfoo.so,需要在我的Android应用程序中使用它。
我的第一次尝试是在Android.mk:
include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILES := test.cpp
LOCAL_LDLIBS := -L$(PATH_TO_FOO) -lfoo
include $(BUILD_SHARED_LIBRARY)
在我的活动中,我有:
statis
{
System.loadLibrary("foo");
}
这构建正确,但是我注意到创建的apk不包含libfoo.so(我也看到它没有复制到libs / armeabi)。我想因为这个原因我在执行我的应用程序时遇到了UnsatisfiedLinkError。
我在其他一些帖子中看到我需要添加$(PREBUILD_SHARED_LIBRARY),所以我将以下内容添加到我的Android.mk中:
include $(CLEAR_VARS)
LOCAL_MODULE:= foo
LOCAL_SRC_FILES := $(FOO_PATH)/libfoo.so
include $(PREBUILD_SHARED_LIBRARY)
但现在我收到了构建错误:
foo: LOCAL_SRC_FILES points to a missing file.
我确信路径是正确的。请注意,libfoo.so原本是最终的版本号,但我必须删除它(并且只留下.so),因为ndk-build抱怨。
我做错了什么?
答案 0 :(得分:5)
找到解决方案!! LOCAL_SRC_FILES不能有绝对或相对路径,只有文件名。必须在LOCAL_PATH中设置路径。
所以在我的情况下,而不是:
LOCAL_SRC_FILES := $(FOO_PATH)/libfoo.so
我现在有:
LOCAL_PATH := $(FOO_PATH)
LOCAL_SRC_FILES := libfoo.so
这样就行了。
答案 1 :(得分:5)
包含似乎是拼写错误:
include $(PREBUILD_SHARED_LIBRARY)
应该是
include $(PREBUILT_SHARED_LIBRARY)
答案 2 :(得分:1)
在eclipse中,我通过复制路径项目/ libs / armeabi /中的文件来添加静态库,并在清理后重建项目。这包括apk中的.so。