Java 如何链接Android NDK共享库?

Java 如何链接Android NDK共享库?,java,android,c++,android-ndk,linker,Java,Android,C++,Android Ndk,Linker,我可以建立一个生产所有平台的共享库。我有一个makefile name Android.mk作为: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := com_masum_test_JniTest.c LOCAL_MODULE := com_masum_test_JniTest include $(BUILD_SHARED_LIBRARY) 另一个名为Application.mk的文件为: AP

我可以建立一个生产所有平台的共享库。我有一个makefile name Android.mk作为:

 LOCAL_PATH := $(call my-dir)
 include $(CLEAR_VARS)
 LOCAL_SRC_FILES := com_masum_test_JniTest.c
 LOCAL_MODULE := com_masum_test_JniTest
 include $(BUILD_SHARED_LIBRARY) 
另一个名为Application.mk的文件为:

APP_ABI := all
当我输入命令ndk build时,它将创建所有共享库

但当我调用本机函数时,我得到的异常为:-

09-11 15:57:02.018 22949-22949/com.masum.test E/AndroidRuntime﹕ 致命异常:主 进程:com.masum.test,PID:22949 java.lang.IllegalStateException:无法执行活动的方法

原因:java.lang.UnsatifiedLinkError:dalvik.system.PathClassLoader[DexPathList[[zip文件/data/app/com.masum.test-1/base.apk],NativeLibraryDirectory=[/data/app/com.masum.test-1/lib/x86,/vendor/lib,/system/lib]]找不到libcom\u masum\u test\JniTest.so

我甚至没有在我的工作空间中看到lib文件夹。查看图片:-

文件浏览器:-


显然,我的应用程序无法与共享库链接。那么如何链接呢?

我找到了链接的方法。如果我在app/src/main中创建一个名为jniLibs的目录,然后将所有共享库复制到side中。它能够链接和加载库。注意,目录名jniLibs区分大小写

您必须在源代码中调用它:-

static{
    System.loadLibrary("libray_name"); // without prefix 'lib' and suffix '.so' i.e. "libLibName.so" should be only LibName. 
}