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