如果这可以帮助某人,这里如何在本机代码 c/c++ 中加载库:
1 -避免java.lang.UnsatisfiedLinkError: dlopen failed:
将其添加到 build.gradle 中android
堵塞 :
sourceSets {
main {
jniLibs.srcDirs = ['src/main/jniLibs']
}
}
假设你的lib文件位于
src/main/jniLibs/{架构}/
(取决于你在哪里jniLibs
文件夹,就我而言,它位于app/src/main/
但最多的时候是在app/
)
2 -在您的 CMakeList 中,将您的库添加为SHARED and 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/
文件夹,在这种情况下,我们不需要后退。
所以我们必须回到main/在进入之前jniLibs/
4 -添加你的库mylib到您的目标链接库:
target_link_libraries(native-library-jni
..
..
mylib
..
..
)
5 - Finally, to call methods of your lib
mylib.so, you have to create/copy-past the header containing these methods signatures and include it in your source file :
#include "mylib.h"
您现在可以调用您的方法[namespace::]method(args...)
Extra links :
项目源目录 https://cmake.org/cmake/help/v3.3/variable/PROJECT_SOURCE_DIR.html
CMAKE_SOURCE_DIR https://cmake.org/cmake/help/v3.3/variable/CMAKE_SOURCE_DIR.html