如何在Eclipse中将预构建共享库包含在APK中

8

我有一个共享库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最初在末尾有版本号,但由于ndk-build抱怨,我不得不将其删除(仅保留.so)。

我做错了什么?

3个回答

5

这个 include 看起来拼写错误:

include $(PREBUILD_SHARED_LIBRARY)

应该是

include $(PREBUILT_SHARED_LIBRARY)

4
找到解决方案了!LOCAL_SRC_FILES不能使用绝对或相对路径,只能使用文件名。路径必须在LOCAL_PATH中设置。
因此,在我的情况下,应该这样写:
LOCAL_SRC_FILES := $(FOO_PATH)/libfoo.so

我现在有:

LOCAL_PATH := $(FOO_PATH)
LOCAL_SRC_FILES := libfoo.so

这个可以正常工作。


嗨..你能解释一下吗?我遇到了同样的问题。我有3个.so文件需要加载,我应该在.mk文件中写什么? - Chaitanya Chandurkar
2
Downvote。LOCAL_SRC_FILES 绝对可以包含相对路径。 - Paul Du Bois
它可以使用绝对路径吗? - Kadinski

1
在Eclipse中,我通过将文件复制到路径project/libs/armeabi/中并在清理项目后重新构建项目来添加静态库。这将包括.so文件在apk中。

这对我不起作用(ADT22,Indigo,ndk-r9)。库在构建时被删除。 - WindRider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接