美文网首页
JNI配置环境备忘录

JNI配置环境备忘录

作者: hlp22 | 来源:发表于2017-11-19 10:12 被阅读0次

    开始

    在Android Studio3.0中使用JNI非常方便, 基本配置可参考官方文档向现有项目添加 C/C++ 代码。但在实际使用中也会碰到一些问题, 在这里记录下。

    ABI

    ABI全称为Application Binary Interface,其定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库, 目前Android支持的七种不同的CPU架构:ARMv5、ARMv7、x86、MIPS、ARMv8,MIPS64和x86_64,每一种都关联着一个相应的ABI。具体可参考文章Android的.so文件、ABI和CPU的关系你必须知道的ABI和CPU关系

    1. 在模块级build.gradle文件中使用ndk.abiFilters可指定支持的ABI配置,如:

    android {
       ......
        defaultConfig{
           ......
            ndk {
                abiFilters 'armeabi', 'armeabi-v7a',                        'arm64-v8a'
                }
        }
    }
    

    2. 在利用CMake构建脚本中添加库的多个ABI版本时,可使用ANDROID_ABI路径变量,而不必编写多个命令, 例如库在如下目录中的libopencv_java3.so文件,


    abi.png

    则在CMakeLists.txt中使用./src/main/cpp/libs/${ANDROID_ABI}/libopencb_java3.so即可。

    引用第三方库

    例如应用opencv的库, 首先将编译好的so文件(或者a文件)和头文件引入项目,如放在cpp目录下。在CMakeLists.txt中添加:

    include_directories(src/main/cpp/include)
    

    添加opencv的头文件路径;第二步将需要的库引入,

    add_library(lib_opencv STATIC IMPORTED )
    set_target_properties(lib_opencv
                           PROPERTIES IMPORTED_LOCATION
                           /src/main/cpp/libs/${ANDROID_ABI}/libopencv_java3.so)
    

    最后使用添加的库:

    target_link_libraries(native-lib
                           android
                           lib_opencv)
    

    常用的CMake知识点

    1. cmakelists.txt文件路径为${CMAKE_SOURCE_DIR};

    2. 设置常量,如将库路径命名为LIBS_PATH

    set(LIBS_PATH ${CMAKE_SOURCE_DIR}/src/main/cpp/libs/)
    

    3. 添加预定义宏

    ADD_DEFINITIONS(-D宏名称 -D宏名称......)
    

    4. 可利用ADD_SUBDIRECTORY添加子项目文件;

    相关文章

      网友评论

          本文标题:JNI配置环境备忘录

          本文链接:https://www.haomeiwen.com/subject/rasuvxtx.html