[英]How to load native library into native android code? (AndroidStudio)
我在C中有一个名为mylib的库,位于文件夹jniLibs / your_architecture / mylib.so中
在Java中,要加载库,只需在源代码中键入该代码即可:
static {
System.loadLibrary("mylib");
}
但是如何在本机C代码中加载库(在Android Studio中)? 我补充说该库不使用JNI约定,它是一个普通的共享库。
如果这可以帮助某人,那么这里是如何使用本地代码c / c ++加载库:
1-避免java.lang.UnsatisfiedLinkError: dlopen failed:
将其添加到build.gradle到android
块中:
sourceSets {
main {
jniLibs.srcDirs = ['src/main/jniLibs']
}
}
假设您的lib文件在
的src /主/ jniLibs / {架构} /
(根据您的jniLibs
文件夹在哪里,在我的情况下,它位于app/src/main/
但大多数时候在app/
)
2-在您的CMakeList中,通过添加以下代码块将您的库添加为SHARED和IMPORTED :
add_library(mylib SHARED
IMPORTED
)
3-通过添加以下块,添加目标属性以找到您的lib mylib.so :
set_target_properties( mylib PROPERTIES
IMPORTED_LOCATION
${PROJECT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/mylib.so
)
我们在这里后退(/../),因为我们认为CMakeLists.txt位于
的src /主/ CPP /
否则,大多数情况下,它位于app/
文件夹中,在这种情况下,我们不需要后退。
因此,在进入jniLibs /之前,我们必须先回到main /
4-将lib mylib添加到目标链接库:
target_link_libraries(native-library-jni
..
..
mylib
..
..
)
#include "mylib.h"
包含这些方法签名的标头,并将其包含在源文件中: #include "mylib.h"
您现在可以调用您的方法[namespace::]method(args...)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.