如何在Android Studio中链接本机库?

时间:2014-05-31 12:34:10

标签: android linker android-studio android-gradle

我目前正在使用已经编译成.so个文件的库。我已将库放入jniLibs并将其加载:

System.loadLibrary("library");

现在,我想在我自己的一些本机代码中使用此库,那么如何将这些.so文件与我自己的jni文件夹中的本机文件相关联?

2 个答案:

答案 0 :(得分:3)

现在可以在Android Studio中使用。您可以在构建时使用CFlags -IldFlags -L

看看这个good example

答案 1 :(得分:0)

通过"本机代码",我知道你想构建另一个使用你的第一个共享库的C模块。

您需要使用Android NDK原生链接系统。如果第二个模块不知道如何获取第一个模块的标头,并且存在共享库,则无法编译第二个模块。

标准方式

第二个模块编译时需要的源代码。

在您的第一个共享库Android.mk中使用LOCAL_C_INCLUDESEXPORT_C_INCLUDESLOCAL_MODULE = first-module-name

在第二个模块Android.mk中,使用LOCAL_SHARED_LIBRARIES = libfirst-module-name。别忘了" lib"。

您的第二个模块需要知道第一个库的标题的路径才能使用它,因此您无法避免在构建时将代码置于本地。

其他可能的解决方案:我还没有使用$(call import-module,<tag>) [doc]

此页面上有关这些编译器标志的所有文档:http://www.kandroid.org/ndk/docs/ANDROID-MK.html

预建方式

仅在第二个模块编译时需要.so和标题

这在Android NDK PREBUILTS documentation.

中有详细描述

第一个共享库:

include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt
LOCAL_SRC_FILES := libfoo.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

使用第一个模块的第二个模块:

include $(CLEAR_VARS)
LOCAL_MODULE := foo-user
LOCAL_SRC_FILES := foo-user.c
LOCAL_SHARED_LIBRARIES := foo-prebuilt
include $(BUILD_SHARED_LIBRARY)