直接在MYSY2里面安装所有环境,如果你使用了deepseek,可以直接进行相关搜索,如:“Windows环境下,使用MYSY2编译FFmpeg7.1.1、andorid-ndk-r24进行交叉编译,生成android可以使用的so库”。关键是.build_android.sh的配置,直接参考如下:
#!/bin/bash
# 配置项 ---------------------------------------------------------------------
NDK="E:/common_code/videoProject/ffmpeg_source/android-ndk-r28"
ANDROID_API=24
ARCH_LIST=("armeabi-v7a" "arm64-v8a")
declare -A TOOLCHAIN_MAP=(
["armeabi-v7a"]="armv7a-linux-androideabi"
["arm64-v8a"]="aarch64-linux-android"
)
# 编译函数 -------------------------------------------------------------------
function build_ffmpeg() {
local ARCH=$1
local OUTPUT_DIR="./android/${ARCH}"
mkdir -p "${OUTPUT_DIR}"
# 动态设置 API 版本
local LOCAL_API=$ANDROID_API
if [ "$ARCH" == "armeabi-v7a" ]; then
LOCAL_API=21
fi
local TOOLCHAIN_PREFIX=${TOOLCHAIN_MAP[$ARCH]}
local TOOLCHAIN_PATH="${NDK}/toolchains/llvm/prebuilt/windows-x86_64"
local BIN_DIR="${TOOLCHAIN_PATH}/bin"
local SYSROOT="${TOOLCHAIN_PATH}/sysroot"
local CC="${BIN_DIR}/${TOOLCHAIN_PREFIX}${LOCAL_API}-clang"
local CXX="${BIN_DIR}/${TOOLCHAIN_PREFIX}${LOCAL_API}-clang++"
# 深度清理
make distclean > /dev/null 2>&1
rm -rf ./compat/*.o ./**/*.d ./**/*.o
./configure \
--prefix="${OUTPUT_DIR}" \
--target-os=android \
--arch="${ARCH%%-*}" \
--enable-cross-compile \
--cross-prefix="${BIN_DIR}/llvm-" \
--sysroot="${SYSROOT}" \
--cc="${CC}" \
--cxx="${CXX}" \
--ar="${BIN_DIR}/llvm-ar" \
--nm="${BIN_DIR}/llvm-nm" \
--strip="${BIN_DIR}/llvm-strip" \
--disable-autodetect \
--pkg-config="pkg-config" \
--extra-cflags="-Os -fPIC -DANDROID" \
--extra-ldflags="-fPIC" \
$( [ "$ARCH" == "armeabi-v7a" ] && echo "--enable-neon" ) \
--enable-jni \
--enable-gpl
make -j8 && make install
if [ $? -ne 0 ]; then
echo "[ERROR] ${ARCH} 编译失败!"
exit 1
fi
}
# 主流程 ---------------------------------------------------------------------
for ARCH in "${ARCH_LIST[@]}"; do
echo "开始编译架构: ${ARCH}"
build_ffmpeg "${ARCH}"
done
echo "所有架构编译完成!输出目录: ./android/"
生成的so库如下: