如何在apk中使用eclipse包含预构建的共享库

时间:2011-10-28 09:06:24

标签: android java-native-interface shared-libraries android-ndk

我有一个共享库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抱怨。

我做错了什么?

3 个答案:

答案 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。

相关问题