NDK - 如何在另一个项目中使用生成的.so库

时间:2011-04-14 20:24:43

标签: android android-ndk java-native-interface

我已成功使用ndk构建&在一个项目中使用.so文件。我需要在另一个项目中使用这个库。我宁愿不复制源代码,只是使用库。

试图复制&将整个libs/armeabi/libcommon.so粘贴到项目根目录不起作用,我认为因为libs/armeabi是一个android生成的路径。

那么最好的方法是什么?

我正在使用Eclipse-Galileo& ndk5。

3 个答案:

答案 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)

我找到了一种方法来做到这一点,所以在这里张贴以防其他人遇到它。

  1. 要共享的代码(包括Java JNI包装器,本机代码,.so库)应该在一个单独的项目中。通过右键单击项目名称将其转换为库项目 - >属性 - > Android属性 - >复选标记“Is Library”。此项目现在无法执行,但可以被其他项目引用。

  2. 在将使用共享对象的项目中,通过右键单击项目名称添加对Libarray项目的引用 - >属性 - > Android属性 - >图书馆/“添加”。这应该显示在上一步中创建的库项目。选择它。

  3. 现在可以在不同项目之间轻松引用.so。

答案 2 :(得分:7)

所有JNI(Java Native Interface)函数名称(如JNIEXPORT void JNICALL Java_com_myapp_myclass_funct)中都有一个包名。所以我想你应该在库中重命名这些funkcions重新编译它。或者也许在您的应用中将其用作外部包。

相关问题