美文网首页Android-NDK/JNI
《NDK——android studio cmakelists.

《NDK——android studio cmakelists.

作者: Oneminute | 来源:发表于2018-08-02 15:33 被阅读2次

    1、设置Cmake版本

    cmake_minimum_required(VERSION 3.4.1)
    

    2、头文件的加载

    include_directories(src/main/cpp/include)
    

    3、set 设置变量,方便使用

    set(DIR ${CMAKE_SOURCE_DIR}/libs)
    

    ${CMAKE_SOURCE_DIR}表示的是CMakeLists.txt所在的目录
    DIR就是代表着CMakeLists.txt同级目录下的libs包

    image.png

    变量的使用

    ${DIR}
    

    4、加载动态库配置一、add_library

    动态库在工程中放置有两种方式
    第一种 是在main目录的jniLibs目录

    image.png

    动态库加载配置,以“libavcodec-57.so”为例

    add_library( avcodec-57 SHARED IMPORTED)
    
    set_target_properties( avcodec-57
                           PROPERTIES IMPORTED_LOCATION
                           ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/libavcodec-57.so)
    

    ${ANDROID_ABI}就是表示各种平台,armeabi或x86。
    add_library( xx ) “配置加载动态库的方式 avcodec-57”动态库的名称,“SHARED ”表示加载的是动态库。
    set_target_properties(xx)配置加载动态库的路径

    可以把相同的路径设置为变量DIR,使得配置如下

    set(DIR ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}/)
    
    add_library( avcodec-57 SHARED IMPORTED)
    
    set_target_properties( avcodec-57
                           PROPERTIES IMPORTED_LOCATION
                           ${DIR}/libavcodec-57.so)
    

    第二种 放置到其他目录,这种方式需要在build.gradle中配置加载路径

    image.png

    在build.gradle中配置加载路径


    image.png
    set(DIR ${CMAKE_SOURCE_DIR}/libs)
    
    add_library(avcodec-56
                SHARED
                IMPORTED)
    set_target_properties(avcodec-56
                          PROPERTIES IMPORTED_LOCATION
                          ${DIR}/armeabi/libavcodec-56.so)
    

    静态库的加载和动态库的加载方式一样,只需要把SHARED替换成STATIC,每一个so文件或.a文件都需要进行如上的配置。

    5、加载动态库配置二、add_library

    已经知道了如何配置加载第三方提供的动态库so文件(看本文第4点),有的第三方只提供原文件(C或C++源码),包括自己写的native.cpp的配置如下

    方式一

    add_library(
                 native-lib
                 SHARED
                 src/main/cpp/native-lib.cpp
                 src/main/cpp/FFmpegMusic.cpp
                ....
                其他更多文件
    )
    

    方式二 file

    # 设置加载源文件路径 my_source
    file(GLOB my_source src/main/cpp/*.cpp src/main/cpp/*.c)
    
    add_library(
                 native-lib
                 SHARED
                 ${my_source}
               )
    

    这样就会自动的去加载my_source路径下.c和.cpp文件

    6、链接target_link_librarie

    #链接
    target_link_libraries(
                           native-lib
                           avcodec-56
                           avdevice-56
                           avformat-56
                           avutil-54
                           postproc-53
                           swresample-1
                           swscale-3
                            log
                            android
                            OpenSLES)
    

    相关文章

      网友评论

        本文标题:《NDK——android studio cmakelists.

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