作者:天黑丶請脱衣 | 来源:互联网 | 2023-06-23 14:54
1、设置Cmake版本cmake_minimum_required(VERSION3.4.1)2、头文件的加载include_directories(srcmaincppinclu
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)