在 Android NDK 项目中使用我自己的预构建共享库

Posted

技术标签:

【中文标题】在 Android NDK 项目中使用我自己的预构建共享库【英文标题】:Using my own prebuilt shared library in an Android NDK project 【发布时间】:2011-09-04 04:20:54 【问题描述】:

我发现这篇文章几乎是我需要的:

How to compile a static library using the android NDK?

基本上,我的项目中的某些部分永远不会更新,因此我试图避免每次更新 Android.mk 文件以添加某些内容时都构建它们。

上面的答案显示了如何将一些代码内置到单独的静态库中,但是当我尝试在单独的 Android.mk 文件中预构建上述代码时,它不会自行构建。这似乎有点多余......如果我必须同时构建它们,那么制作单独的静态库有什么意义呢?

如果我将单独项目中的 Android.mk 更改为:

包括 $(BUILD_SHARED_LIBRARY)

并将它像这样包含在主项目中:

LOCAL_SHARED_LIBRARIES := libMyaccessories.so

然后我得到未解析的引用(函数名),可能是因为它找不到共享库(在调用路径中)

谁能帮我解决这个问题?

【问题讨论】:

【参考方案1】:

在 Android.mk 的文档中,查看PREBUILT_SHARED_LIBRARY 脚本描述。将.so 文件放在lib(不是libs)目录中,并在其旁边编写一个Android.mk 文件,如下所示:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := Myaccessories
LOCAL_SRC_FILES := libMyaccessories.so
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../jni/include

include $(PREBUILT_SHARED_LIBRARY)

【讨论】:

谢谢。我用另一篇文章让ndk构建静态库,找到静态库并将它们移动到本地目录,然后将build_static_lib换成上面的部分,一切都很好=) 下载 Android NDK 后,Android.mk 文档位于 docs/ANDROID-MK.html 中。见developer.android.com/sdk/ndk/overview.html#docs @ESV 我也做了同样的事情,但仍然无法正常工作,请参阅***.com/questions/10106965/… 我的文件层次结构中没有库...你能帮我解决这个问题吗?

以上是关于在 Android NDK 项目中使用我自己的预构建共享库的主要内容,如果未能解决你的问题,请参考以下文章

android -------- NDK 入门指南

在 arm64-v8a lib 上运行 ndk-stack 失败并出现错误文件格式无法识别

NDK开发使用cMake方式 - 添加其他的预编译库

TravisCI中的NDK,CMake和Android

使用预编译库PREBUILT LIBRARY

导入 Android NDK 项目(解码 OGG)