美文网首页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