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

Sas*_*lic 7 java-native-interface android 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)
Run Code Online (Sandbox Code Playgroud)

在我的活动中,我有:

statis
{
    System.loadLibrary("foo");
}
Run Code Online (Sandbox Code Playgroud)

这构建正确,但我注意到创建的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)
Run Code Online (Sandbox Code Playgroud)

但现在我收到了构建错误:

foo: LOCAL_SRC_FILES points to a missing file.
Run Code Online (Sandbox Code Playgroud)

我确信路径是正确的.请注意,libfoo.so原本是最后的版本号,但我必须删除它(并且只留下.so),因为ndk-build抱怨.

我究竟做错了什么?

Sas*_*lic 5

找到解决方案!! LOCAL_SRC_FILES不能有绝对或相对路径,只有文件名.必须在LOCAL_PATH中设置路径.

所以在我的情况下,而不是:

LOCAL_SRC_FILES := $(FOO_PATH)/libfoo.so
Run Code Online (Sandbox Code Playgroud)

我现在有了:

LOCAL_PATH := $(FOO_PATH)
LOCAL_SRC_FILES := libfoo.so
Run Code Online (Sandbox Code Playgroud)

这很好用.

  • Downvote.LOCAL_SRC_FILES绝对可以包含相对路径. (2认同)

小智 5

包含似乎拼写错误:

include $(PREBUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

应该

include $(PREBUILT_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)