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

我已经成功地使用ndk在一个项目中构build和使用.so文件。 我需要在另一个项目中使用这个库。 我宁愿不在那里复制源代码,只是使用库。 试图复制和粘贴整个libs / armeabi / libcommon.so到项目根目录不起作用,我想因为libs / armeabi是一个android生成的path。

那么最好的办法是什么?

我正在使用Eclipse-Galileo&ndk5。

做这一切有一个更简单的方法。

假设你的预build库叫做“libprebuilt.so”

在新项目的项目文件夹中,只需要包含预build库,就可以执行如下操作:

mkdir -p jni/libprebuilt cp libprebuilt.so jni/libprebuilt 

然后,创build一个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. 要共享的代码(包括Java JNI包装器,本地代码,.so库)应该在一个单独的项目中。 通过右键单击项目名称 – >属性 – > Android属性 – >选中标记“Is Library”,将其转换为库项目。 这个项目现在不能执行,但可以被其他项目引用。

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

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

在所有JNI(Java本地接口)函数名称(如JNIEXPORT void JNICALL Java_com_myapp_myclass_funct )中都有一个包名称。 所以我想你应该重新编译库中的这些funkcions。 或者,也可以将其用作应用程序中的外部软件包。