【问题标题】:how to include prebuilt shared libraries in apk with eclipse如何使用 Eclipse 在 apk 中包含预构建的共享库
【发布时间】:2011-12-17 03:39:39
【问题描述】:

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

我做错了什么?

【问题讨论】:

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


    【解决方案1】:

    包含似乎拼写错误:

    include $(PREBUILD_SHARED_LIBRARY)
    

    应该是

    include $(PREBUILT_SHARED_LIBRARY)
    

    【讨论】:

      【解决方案2】:

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

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

      LOCAL_SRC_FILES := $(FOO_PATH)/libfoo.so
      

      我现在有:

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

      这工作正常。

      【讨论】:

      • 嘿..你能说清楚吗。 m面临同样的问题。我要加载 3 个 .so 文件我应该在 .mk 文件中写什么?
      • 投反对票。 LOCAL_SRC_FILES 绝对可以包含相对路径。
      • 可以有绝对路径吗?
      【解决方案3】:

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

      【讨论】:

      • 这对我不起作用(ADT22、Indigo、ndk-r9)。该库在构建时被删除。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 2018-04-22
      相关资源
      最近更新 更多