1. 准备环境
确保你的 Windows 系统已安装以下工具:
Android Studio
NDK(Native Development Kit)
MSYS2(用于提供类 Unix 环境)
FFmpeg 源码
Git Bash(可选,推荐使用)
安装 MSYS2
下载并安装 MSYS2。
打开 MSYS2 终端,更新包管理器:
pacman -Syu
3.安装必要的工具:
pacman -S make pkg-config diffutils git
2. 下载 FFmpeg 源码
在 MSYS2 终端中,克隆 FFmpeg 源码:
git clone https://github.com/FFmpeg/FFmpeg.git
cd FFmpeg
3. 配置 FFmpeg 编译脚本
在 FFmpeg 源码目录中创建一个 build_android.sh
脚本,内容如下:
#!/bin/bash
# 设置 NDK 路径
NDK=/d/aaa/ndk/21.4.7075529
# 设置输出目录
OUTPUT=/d/output
# 定义架构和 API 组合
ARCHS=("arm" "arm64")
CPUS=("armv7-a" "armv8-a")
APIS=(21 21)
# 遍历架构
for i in "${!ARCHS[@]}"; do
ARCH=${ARCHS[$i]}
CPU=${CPUS[$i]}
API=${APIS[$i]}
# 设置工具链
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/windows-x86_64
SYSROOT=$TOOLCHAIN/sysroot
# 设置编译器和编译选项
if [ "$ARCH" == "arm" ]; then
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
else
CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
fi
CFLAGS="-march=$CPU -Os -fPIC -D__ANDROID_API__=$API"
LDFLAGS=""
# 配置 FFmpeg
./configure \
--prefix=$OUTPUT/$ARCH \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-symver \
--disable-asm \
--enable-cross-compile \
--cross-prefix=$CROSS_PREFIX \
--target-os=android \
--arch=$ARCH \
--sysroot=$SYSROOT \
--cc=$CC \
--extra-cflags="$CFLAGS" \
--extra-ldflags="$LDFLAGS"
# 编译并安装
make clean
make -j4
make install
done
确保你的 NDK 已经解压或安装到 D:\aaa
目录下。例如,NDK 的完整路径可能是:
D:\aaa\ndk\25.1.8937393
在 FFmpeg 编译脚本中,将 NDK 路径设置为 D:\aaa
目录。由于 Windows 路径使用反斜杠 \
,而在类 Unix 环境(如 MSYS2)中需要使用正斜杠 /
,因此需要将路径转换为类 Unix 格式。
4. 运行编译脚本
在 MSYS2 终端中,进入 FFmpeg 源码目录。
运行编译脚本:
chmod +x build_android.sh
./build_android.sh
编译完成后,.so
文件会生成在 OUTPUT
指定的目录中。
5.检查编译器版本
运行以下命令检查 gcc
或 clang
的版本:
gcc --version
或
clang --version
6. 升级 GCC 或 Clang
pacman -Syu
pacman -S mingw-w64-x86_64-gcc
如果报错,检查
7. 检查是否安装了 GCC
运行以下命令检查 GCC 是否已安装:
which gcc
pacman -Q mingw-w64-x86_64-gcc
确认 GCC 的安装路径
GCC 的可执行文件通常安装在 MSYS2 的 mingw64/bin
目录下。运行以下命令,检查 GCC 是否存在:
ls /mingw64/bin/gcc.exe
8.配置环境变量(如果需要)
如果 gcc --version
仍然报错,可能是因为 GCC 的路径没有添加到系统的环境变量中。
确保 MSYS2 的
mingw64/bin
或usr/bin
目录在环境变量中。打开 MSYS2 终端,运行以下命令检查路径:
echo $PATH
如果路径中没有 mingw64/bin
或 usr/bin
,手动添加:
export PATH=/mingw64/bin:$PATH
临时添加(仅当前终端会话有效)
运行以下命令:
export PATH=/mingw64/bin:$PATH
永久添加(对所有终端会话有效)
编辑你的 shell 配置文件(如 ~/.bashrc
或 ~/.bash_profile
),添加以下行:
export PATH=/mingw64/bin:$PATH
然后运行以下命令使配置生效:
source ~/.bashrc