如何将本机库加载到本机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中,通过添加以下块将库添加为SHAREDIMPORTED

 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是否相同?