我想从另一个Android项目中使用现有的本地库,所以我只需将NDK构建库(libcalculate.so)复制到我的新Android项目中。在我的新Android项目中,我创建了一个文件夹libs / armeabi /
,并将libcalculate.so放在那里。没有jni /文件夹。我的测试设备具有ARM架构。
在我的Java代码中,我通过以下方式加载库:
static{
System.loadLibrary("calculate");
}
当我运行我的新的安卓项目时,出现了错误:
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"
unzip-l package.apk
,或将apk重命名为.zip并使用某些应用程序打开它。如果没有出现,请检查打包过程(您的IDE是否注意到该文件夹是否存在,您是否需要刷新项目?)。 - mstorsjo