我想使用另一个 Android项目中的现有本机库,因此我只是将NDK构建的库(libcalculate.so)复制到我的新Android项目中。在我的新Android项目中,我创建了一个文件夹libs/armeabi/
,并将libcalculate.so放在此处。有没有 JNI /文件夹。我的测试设备具有ARM体系结构。
在我的Java代码中,我通过以下方式加载库:
static{
System.loadLibrary("calculate");
}
当我运行新的android项目时,出现错误:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
因此,正如错误所述,复制的本机库不在/ verdor / lib或/ system / lib中,在我的情况下如何解决此问题?
(我将apk包解压缩,在lib /下有libcalculate.so)
====更新=====
我还尝试在项目根目录下创建一个jni /文件夹,并在jni /下添加一个Android.mk文件。Android.mk的内容为:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libcalculate
LOCAL_SRC_FILES := libcalculate.so
include $(PREBUILT_SHARED_LIBRARY)
然后,在项目根目录下,我执行了ndk-build。此后,ndk-build生成armeabi /和armeabi-v7a /目录(文件夹中有libcalculate.so)。
然后,我运行maven成功构建项目。在最终的apk软件包中,有:
lib/armeabi/libcalculate.so
lib/armeabi-v7a/libcalculate.so
但是,当我运行我的应用程序时,会抛出相同的错误:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
libs/
?您可能需要为每个要支持的目标ABI创建一个子目录(armeabi,armeabi-v7a,x86,mips等),并将适当的.so文件放置在每个子目录中(即,为armeabi构建的.so文件进入了libs/armeabi/
,等等)。