如何链接Android NDK共享库?

时间:2015-09-11 20:24:35

标签: java android c++ android-ndk linker

我可以构建一个产生所有平台的共享库。我有一个makefile名称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.UnsatisfiedLinkError:dalvik.system.PathClassLoader [DexPathList [[zip file“/data/app/com.masum.test-1/base.apk"],nativeLibraryDirectories=[/data/app /com.masum.test-1/lib/x86,/ vendor / lib,/ system / lib]]]找不到“libcom_masum_test_JniTest.so”

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

文件浏览器: -

enter image description here

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

1 个答案:

答案 0 :(得分:0)

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

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

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