我有一个C语言库,名为mylib,位于文件夹jniLibs/your_architecture/mylib.so中。
在Java中,要加载这个库,只需在源代码中输入以下代码:
static {
System.loadLibrary("mylib");
}
但是你如何在原生C代码(在Android Studio中)中加载库? 我补充一下,该库不使用JNI约定,它是一个普通的共享库。
我有一个C语言库,名为mylib,位于文件夹jniLibs/your_architecture/mylib.so中。
在Java中,要加载这个库,只需在源代码中输入以下代码:
static {
System.loadLibrary("mylib");
}
但是你如何在原生C代码(在Android Studio中)中加载库? 我补充一下,该库不使用JNI约定,它是一个普通的共享库。
java.lang.UnsatisfiedLinkError: dlopen failed:
,请将以下内容添加到build.gradle文件中的android
块中:sourceSets {
main {
jniLibs.srcDirs = ['src/main/jniLibs']
}
}
src/main/jniLibs/{Architecture}/
(取决于您的 jniLibs
文件夹的位置,在我的情况下它位于 app/src/main/
,但大多数情况它在 app/
)。
2 - 在你的 CMakeList 中,将你的库添加为 SHARED 和 IMPORTED,方法是添加以下代码块:
add_library(mylib SHARED
IMPORTED
)
3 - 添加目标属性以定位您的库 mylib.so,方法是添加以下代码块:
set_target_properties( mylib PROPERTIES
IMPORTED_LOCATION
${PROJECT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/mylib.so
)
我们在这里使用反斜杠 (/../) 是因为我们认为 CMakeLists.txt 文件位于
src/main/cpp/
否则,大多数情况下它位于 app/
文件夹中,在这种情况下,我们不需要使用反斜杠。
因此,在进入 jniLibs/ 之前,我们必须返回到 main/。
4 - 将你的库mylib添加到目标链接库中:
target_link_libraries(native-library-jni
..
..
mylib
..
..
)
#include "mylib.h"
现在你可以调用你的方法了:[namespace::]method(args...)