如何将本机库加载到本机android代码? (AndroidStudio)
我在文件夹jniLibs / your_architecture / mylib.so中有一个名为mylib的库
在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/
的最多时间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/
文件夹中的大部分时间,在这种情况下,我们不需要前进。
所以我们必须回到main /进入jniLibs /之前
4 –将lib mylib添加到目标链接库:
target_link_libraries(native-library-jni .. .. mylib .. .. )
5 –最后,要调用lib mylib.so的方法,您必须创建/复制包含这些方法签名的标头并将其包含在源文件中: #include "mylib.h"
你现在可以调用你的方法[namespace::]method(args...)
额外链接:
PROJECT_SOURCE_DIR
CMAKE_SOURCE_DIR
问:CMake中的CMAKE_SOURCE_DIR和PROJECT_SOURCE_DIR是否相同?