FFmpeg 5.x 编译 so 文件的记录
记录一下 FFmpeg 给 Android 编译 so 文件的全过程
FFmpeg 版本:5.1.7
NDK 版本:21.4.7075529
源码准备
git clone https://github.com/FFmpeg/FFmpeg
切换到 5.1.7 版本
cd ./FFmpeg
git checkout -b n5.1.7
so 文件编译脚本 (build_android.sh) (就放在 FFmpeg 目录中即可)
这里唯一需要你指定 NDK 的目录. 替换成 ndk 所在的目录
#!/bin/bash# 配置NDK路径
NDK=<NdkParentPath>/ndk/21.4.7075529
# 配置编译目标Android版本
API=21
# 配置输出目录
OUTPUT=$(pwd)/android_build# 支持的架构
ARCHS=("arm64-v8a" "armeabi-v7a" "x86" "x86_64")
# ARCHS=("arm64-v8a" "x86")# 循环编译各架构
for ARCH in "${ARCHS[@]}"; doecho "开始编译 $ARCH..."# 根据架构设置编译参数case $ARCH inarm64-v8a)CPU=armv8-aCROSS_PREFIX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android-CC=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android$API-clangCXX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android$API-clang++ARCH_CONFIG="aarch64";;armeabi-v7a)CPU=armv7-aCROSS_PREFIX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-CC=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi$API-clangCXX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi$API-clang++ARCH_CONFIG="arm";;x86)CPU=i686CROSS_PREFIX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/i686-linux-android-CC=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/i686-linux-android$API-clangCXX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/i686-linux-android$API-clang++ARCH_CONFIG="x86";;x86_64)CPU=x86-64CROSS_PREFIX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/x86_64-linux-android-CC=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/x86_64-linux-android$API-clangCXX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/x86_64-linux-android$API-clang++ARCH_CONFIG="x86_64";;esac# 创建输出目录mkdir -p $OUTPUT/$ARCH# 配置FFmpeg编译参数./configure \--prefix=$OUTPUT/$ARCH \--enable-cross-compile \--target-os=android \--arch=$ARCH_CONFIG \--cpu=$CPU \--cc=$CC \--cxx=$CXX \--cross-prefix=$CROSS_PREFIX \--sysroot=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/sysroot \--extra-cflags="-Os -fpic -DANDROID -D__ANDROID_API__=$API" \--extra-ldflags="-lm" \--enable-shared \--disable-static \--disable-doc \--disable-programs \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-symver \--enable-small \--disable-asm# 编译并安装make cleanmake -j$(nproc)make installecho "$ARCH 编译完成"
doneecho "所有架构编译完成,输出目录: $OUTPUT"
正式开始编译 so 文件
chmod u+x ./build_android.sh
./build_android.sh