开启 WSL
- 控制面板 -> 程序 -> 启用或关闭 Windows 功能 -> 适用于 Linux 的 Windows 子系统
-用适用于 Linux 的 Windows 子系统 已管理员身份运行Windows PowerShell。 运行以下命令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
- 去Microsoft Store 搜索 Ubuntu
然后点击获取,安装即可
WSL 安装 NDK
- 创建目录:
mkdir -p /home/xy/android/ndk
- 进入目录:
cd /home/xy/android/ndk
- 使用 wget 命令下载 NDK:
wget https://dl.google.com/android/repository/android-ndk-r21e-linux-x86_64.zip
- 下载完成后解压到 ndk-r21e 目录,没有unzip的话根据提示安装即可:
sudo apt install unzip
解压
unzip android-ndk-r21e-linux-x86_64.zip -d ndk-r21e
- 解压好之后配置环境变量:
sudo vim /etc/profile
按 i 键编辑,在配置文件末尾增加以下内容:
#android NDK
export ANDROID_NDK="/home/xy/android/ndk/ndk-r21e/android-ndk-r21e"
export PATH="$ANDROID_NDK:$PATH"
按 esc 键退出编辑模式,输入 :wq 保存退出。
- 接着更新环境变量:
source /etc/profile
- NDK 就配置好了,接着我们可以看下是否 OK。输入 ndk-build 命令,如果出现以下提示,就 OK 了:
Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
/home/xy/android/ndk/ndk-r21e/android-ndk-r21e/build/core/build-local.mk:151: *** Android NDK: Aborting
下载 ffmpeg 源码
- 进入目录:
cd /home/xy/android
- 创建源码目录:
mkdir src
- 创建 so 目录:
mkdir so
- 进入源码目录:
cd src
- 下载 ffmpeg 源码:
git clone https://gitee.com/mirrors/ffmpeg.git
- 下载 OK 后,进入 FFmpeg 源码目录:
cd FFmpeg
- 修改 configure 文件权限:
chmod 777 configure
- 打开 Vim:
sudo vim configure
输入 /CMDLINE_SET,按下回车键来匹配设置项。找到 cross_prefix,按 i 键编辑,新增一行内容:
CMDLINE_SET="
$PATHS_LIST
ar
arch
as
assert_level
build_suffix
cc
objcc
cpu
cross_prefix
# 下面一行内容为新增命令行参数,原文件中没有
cross_prefix_clang
custom_allocator
cxx
dep_cc
# 省略其他.....
"
按 esc 键退出编辑模式,输入 /ar_default="{ar_default}",按下回车键来匹配设置项。按 i 键键入编辑:
# 原内容
ar_default="${cross_prefix}${ar_default}"
cc_default="${cross_prefix}${cc_default}"
cxx_default="${cross_prefix}${cxx_default}"
nm_default="${cross_prefix}${nm_default}"
pkg_config_default="${cross_prefix}${pkg_config_default}"
将中间两行修改为:
# 修改后的内容
ar_default="${cross_prefix}${ar_default}"
#------------------------------------------------
cc_default="${cross_prefix_clang}${cc_default}"
cxx_default="${cross_prefix_clang}${cxx_default}"
#------------------------------------------------
nm_default="${cross_prefix}${nm_default}"
pkg_config_default="${cross_prefix}${pkg_config_default}"
按 esc 键退出编辑,输入 :wq 保存退出。
注释:Vim 中,按 n(小写 n) 可以匹配下一个内容,按 shift+n 可以匹配上一个内容。输入 set nohlsearch(简写为:set-noh)来取消文本的高亮。
- 新增编译脚本文件:
touch build_android_clang.sh
- 修改脚本权限:
chmod 777 build_android_clang.sh
- 编辑脚本:
sudo vim build_android_clang.sh
按 i 键编辑,脚本文件内容如下:
#!/bin/bash
set -x # 执行指令后,先显示该指令及所下的参数。
# 目标Android版本
API=21
# arm aarch64 i686 x86_64
# # 配置编译平台 编译armv7-a架构
ARCH=arm
# armv7a aarch64 i686 x86_64
CPU=armv7-a
#so库输出目录
OUTPUT=/home/xy/android/so/$CPU
# NDK的路径,根据自己的NDK位置进行设置
NDK=/home/xy/android/ndk/ndk-r21e/android-ndk-r21e
# 编译工具链路径 交叉编译工具链目录变量
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
CROSS_PREFIX_CLANG=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-
# 编译环境
SYSROOT=$TOOLCHAIN/sysroot
function build
{
./configure \
--prefix=$OUTPUT \
# 配置编译后的应用平台
--target-os=android \
--arch=$ARCH \
--cpu=$CPU \
--enable-asm \
--enable-neon \
--enable-small \
# 开启交叉编译选项
--enable-cross-compile \
--enable-shared \
--disable-static \
--disable-doc \
--disable-symver \
--disable-programs \
--sysroot=$SYSROOT \
--cross-prefix=$CROSS_PREFIX \
--cross-prefix-clang=$CROSS_PREFIX_CLANG \
# 配置编译器参数
--extra-cflags="-fPIC"
make clean
# 这里是定义用几个CPU编译
make -j8
make install
}
build
按 esc 键退出编辑,输入 :wq 保存退出。
- 写好编译脚本后,安装 make 命令:
sudo apt-get install make
- 执行编译脚本:
./build_android_clang.sh
- 生成结果
编译生成的内容在上面设置的
OUTPUT可以找到,包括include,lib,share可以将生成的include和lib拷贝到Android项目中使用了