我目前正在使用已经编译成.so
个文件的库。我已将库放入jniLibs
并将其加载:
System.loadLibrary("library");
现在,我想在我自己的一些本机代码中使用此库,那么如何将这些.so
文件与我自己的jni
文件夹中的本机文件相关联?
答案 0 :(得分:3)
现在可以在Android Studio中使用。您可以在构建时使用CFlags -I
和ldFlags -L
。
看看这个good example。
答案 1 :(得分:0)
通过"本机代码",我知道你想构建另一个使用你的第一个共享库的C模块。
您需要使用Android NDK原生链接系统。如果第二个模块不知道如何获取第一个模块的标头,并且存在共享库,则无法编译第二个模块。
第二个模块编译时需要的源代码。
在您的第一个共享库Android.mk中使用LOCAL_C_INCLUDES
,EXPORT_C_INCLUDES
和LOCAL_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)