记录一下 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[@]}"; do
echo "开始编译 $ARCH..."
# 根据架构设置编译参数
case $ARCH in
arm64-v8a)
CPU=armv8-a
CROSS_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-clang
CXX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android$API-clang++
ARCH_CONFIG="aarch64"
;;
armeabi-v7a)
CPU=armv7-a
CROSS_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-clang
CXX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi$API-clang++
ARCH_CONFIG="arm"
;;
x86)
CPU=i686
CROSS_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-clang
CXX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/i686-linux-android$API-clang++
ARCH_CONFIG="x86"
;;
x86_64)
CPU=x86-64
CROSS_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-clang
CXX=$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 clean
make -j$(nproc)
make install
echo "$ARCH 编译完成"
done
echo "所有架构编译完成,输出目录: $OUTPUT"
正式开始编译 so 文件
chmod u+x ./build_android.sh
./build_android.sh