我在C文件夹中有一个名为 mylib 的库 的 jniLibs / your_architecture / mylib.so
在Java中,要加载库,您只需在源代码中键入该代码:
static {
System.loadLibrary("mylib");
}
但是如何在本机C代码中加载库(在Android Studio中)? 我补充说,该库不使用JNI约定,它是一个普通的共享库。
答案 0 :(得分:0)
如果这可以帮助某人,这里有如何用本机代码加载库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
..
..
)
<小时/> 5 - 最后,要调用lib mylib.so 的方法,您必须创建/复制包含这些方法签名的标头并将其包含在源文件中:
#include "mylib.h"
您现在可以调用方法[namespace::]method(args...)
<小时/> 额外链接:
Q : Are CMAKE_SOURCE_DIR and PROJECT_SOURCE_DIR the same in CMake?