android ndk 交叉编译ffmpeg。
编译好后,我们需要把静态库 lib 和头文件 include引入到Androidstudio中。
引入后,我们需要编写CMakeList.txt文件
cmake_minimum_required(VERSION 3.4.1)
## CMAKE_SOURCE_DIR:表示cmakeList所在路径
## 添加cmakeList所在路径/codec/ 下所有的cpp源文件编译
file(GLOB source ${CMAKE_SOURCE_DIR}/codec/*.cpp)
add_library(
ffmpeg-native
SHARED
${source}
native-lib.cpp
)
##配置 预编译库 如ffmpeg库 路径
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_GLAGS} -L${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}")
##加入预编译库的头文件 如ffmpeg库 的头文件
include_directories(include)
#添加链接库 链接到ffmpeg-native中
target_link_libraries(
ffmpeg-native
avfilter
avformat
avcodec
avutil
swresample
swscale
z
android
OpenSLES
log)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_GLAGS} -L${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}") 配置ffmpeg静态库include_directories(include) 配置头文件,这里括号中直接默认路径是cmake的路径,include和cmake同一个路径,所以直接写include就可以了。
target_link_libraries 链接库,注意:ffmpeg 依赖libZ.so。
配置好Cmake之后,配置app/build.gradle文件
android {
...
defaultConfig {
...
externalNativeBuild {
cmake {
cppFlags "-std=c++14"
}
}
//指定我们编译时,使用哪个cup架构下的库
ndk {
abiFilters 'armeabi-v7a'
}
}
externalNativeBuild {
//指定cmake路径
cmake {
path "src/main/cpp/CMakeLists.txt"
}
}
}
ndk{ abiFilters 'armeabi-v7a'},指定armeabi-v7a架构,分手机,我使用的时候不加这句话会报错,因为默认使用的是v8a架构。会找不到我们自己导入的ffmpeg库。