开发环境:Android Studio 3.5.2+gradle-5.4.1-all
引入方式:头文件+静态库
CMakeLists文件主要包含6个配置语句。
cmake_minimum_required(VERSION 3.4.1)
add_library(ffmpegmediaplayer
SHARED
native-lib.cpp)
include_directories(include)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/../../../libs/${CMAKE_ANDROID_ARCH_ABI}")
find_library(log-lib
log)
target_link_libraries(ffmpegmediaplayer
-Wl,--start-group
avfilter
avformat
avcodec
avutil
swresample
swscale
-Wl,--end-group
z
android
${log-lib})
1.cmake_minimum_required(VERSION 3.4.1)
从名称上可以看到,这里是配置cmake最低需要的版本,这个是默认生成的,没有特殊要求,可以不用管。
2.add_library
ffmpegmediaplayer, 配置生成so动态库的名称,可自定义。生成的动态库完整名称为libffmpegmediaplayer.so。
SHARED,配置该库为动态共享库。
native-lib.cpp,c++源文件,文件在app/src/main/cpp 目录下,也就是我们常说的JNI文件,可以配置多个。
3.include_directories
配置头文件路径,类似配置windows的环境变量,不配置编译时出现找不到库的情况
include,是头文件路径,因为头文件是放app/src/main/cpp/include,而这里默认使用相对路径,所以只需要填入include即可。
4.set
set语句配置一个系统变量,类似windows的环境变量。这里将静态库的路径加入到系统变量中。CMAKE_SOURCE_DIR表示app/src/main/cpp/,两个点点表示回退到上一个目录,三组点点就是回退到app这个一级。CMAKE_ANDROID_ARCH_ABI指明对应不同的CPU平台。
5.find_library
因为在JNI层要用到打印日志,所以配置加载Android自带的log库,命名为log-lib是为了方便使用,这个库在sdk/ndk目录下。
6.target_link_libraries
生成ffmpegmediaplayer动态库时,将声明的库(包括静态库和动态库)链接进去。因为链接库是有先后顺序的(前者依赖于后者),所以用-Wl,--start-group -Wl,--end-group表示忽略链接顺序,也可以不忽略顺序,但是顺序一定要正确,要不然编译会出现找不到库的情况。z库以及android库也是需要用到的,这两个库同样在sdk/ndk目录下。avfilter avformat avcodec avutil swresample swscale,这几个ffmpeg静态库放在项目/libs目录下。
7.特别说明:
7.1 新建的项目,CMakeLists文件默认在cpp目录下,所以对于文件路径的引
用默认是app/src/main/cpp/开头的。
7.2 FFmepg用到的头文件放到app/src/main/cpp/include目录下
7.3 FFmepg用到的静态库放到app/libs目录下
网友评论