链接到使用ndk构建的Android库项目中的共享库

Link to shared library from Android library project with ndk-build

本文关键字:Android 共享 项目 构建 ndk 链接      更新时间:2023-10-16

我有一个Android库项目"A",它在"A/jni"文件夹中包含本机C++源,可以很好地构建为"A/libs/armeabi-v7a/libA.so",并与其他平台相关。

我现在想做一个Android项目"B",它包括Java内容以及"B/jni"文件夹中更多的原生C++源代码。这些源使用项目"A"的C++库中的代码。我通过设置成功地编译了这些

  LOCAL_C_INCLUDES  := (path_to_A/jni) 

(即从项目"A"中拾取头文件)。

问题是:我如何以一种干净的方式链接到"A/lib/armeabi-v7a/libA.so"?

我已经阅读了IMPORT_MODULE文档,但这似乎是针对这样一种情况,即您希望链接到纯NDK模块,而不是安卓库项目中的库。

首先创建一个模块,将您的libA.so库编译为项目B中预先构建的共享库。

include $(CLEAR_VARS)
LOCAL_MODULE := libA
LOCAL_SRC_FILES := path/to/libA.so
include $(PREBUILT_SHARED_LIBRARY)

然后,通过以下方式将此模块添加到项目的主模块中:

LOCAL_SHARED_LIBRARIES := libA

我从未在我的项目中尝试过IMPORT_MODULE选项,但这在我的情况下有效。

@Kasper:你说:

LOCAL_C_INCLUDES  := (path_to_B/jni)

你的意思是:

LOCAL_C_INCLUDES  := (path_to_A/jni)