Android --ffmpeg(一) 在Windows10下的WSL编译环境配置

928 阅读2分钟

开启 WSL

  • 控制面板 -> 程序 -> 启用或关闭 Windows 功能 -> 适用于 Linux 的 Windows 子系统

image.png

image.png

image.png

-用适用于 Linux 的 Windows 子系统 已管理员身份运行Windows PowerShell。 运行以下命令:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
  • 去Microsoft Store 搜索 Ubuntu

image.png

image.png 然后点击获取,安装即可

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="crossprefix{cross_prefix}{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可以找到,包括includelibshare 可以将生成的include和lib拷贝到Android项目中使用了