如何将本机库加载到本机android代码? (AndroidStudio)

时间:2017-07-25 22:24:13

标签: android c android-studio shared-libraries

我在C文件夹中有一个名为 mylib 的库 的 jniLibs / your_architecture / mylib.so

在Java中,要加载库,您只需在源代码中键入该代码:

static {
  System.loadLibrary("mylib");
}

但是如何在本机C代码中加载库(在Android Studio中)? 我补充说,该库不使用JNI约定,它是一个普通的共享库。

1 个答案:

答案 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...)

<小时/> 额外链接:

PROJECT_SOURCE_DIR

CMAKE_SOURCE_DIR

Q : Are CMAKE_SOURCE_DIR and PROJECT_SOURCE_DIR the same in CMake?