我已成功使用ndk构建&在一个项目中使用.so
文件。我需要在另一个项目中使用这个库。我宁愿不复制源代码,只是使用库。
试图复制&将整个libs/armeabi/libcommon.so
粘贴到项目根目录不起作用,我认为因为libs/armeabi
是一个android生成的路径。
那么最好的方法是什么?
我正在使用Eclipse-Galileo& ndk5。
答案 0 :(得分:44)
有一种更简单的方法来完成所有这些。
假设您的预建库名为“libprebuilt.so”
在新项目的项目文件夹中,您只想包含预建库,请执行以下操作:
mkdir -p jni/libprebuilt
cp libprebuilt.so jni/libprebuilt
然后,只需创建一个jni / libprebuilt / Android.mk文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libprebuilt
LOCAL_SRC_FILES := libprebuilt.so
include $(PREBUILT_SHARED_LIBRARY)
然后当你进行ndk-build时,它会将这个库复制到libs / armeabi / ...这就是全部!
答案 1 :(得分:20)
我找到了一种方法来做到这一点,所以在这里张贴以防其他人遇到它。
要共享的代码(包括Java JNI包装器,本机代码,.so库)应该在一个单独的项目中。通过右键单击项目名称将其转换为库项目 - >属性 - > Android属性 - >复选标记“Is Library”。此项目现在无法执行,但可以被其他项目引用。
在将使用共享对象的项目中,通过右键单击项目名称添加对Libarray项目的引用 - >属性 - > Android属性 - >图书馆/“添加”。这应该显示在上一步中创建的库项目。选择它。
现在可以在不同项目之间轻松引用.so。
答案 2 :(得分:7)
所有JNI(Java Native Interface)函数名称(如JNIEXPORT void JNICALL Java_com_myapp_myclass_funct
)中都有一个包名。所以我想你应该在库中重命名这些funkcions重新编译它。或者也许在您的应用中将其用作外部包。