环境:
- Mac电脑
- Mac下的NDK:android-ndk-r14b-darwin-x86_64.zip
- FFmpeg-release-3.3.zip
1. 解压FFmpeg-release-3.3.zip,目录结构如下:
2. 修改configure配置文件
如果直接按照未修改的配置进行编译,结果编译出来的so文件类似libavcodec.so.55.39.101,版本号位于so之后,Android上似乎无法加载。因此需要按如下修改:
将该文件中的如下四行:
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'
替换为:
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
3. 编写build_android可执行文件。
具体做法:赋值configure文件,并修改名为build_android,使用Xcode打开build_android文件,将里面的文件全选删除,并改为下面的文件内容:
#!/bin/bash
# NSK所在本机路径
NDK=/Users/mazaiting/mazaiting/other/android-ndk-r14b
# NDK所使用的Android版本
NDK_VERSION=android-21
function build_one {
./configure \
--target-os=linux \
--arch=$ARCH \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--enable-cross-compile \
--cross-prefix=$CROSS_COMPILE \
--sysroot=$SYSROOT \
--extra-cflags="-fpic"
make clean
make
make install
}
# arm架构
ARCH=arm
# arm架构
CPU=arm
# 生成的文件路径,当前路径/android/CPU变量所指的文件夹名
PREFIX=$(pwd)/android/$CPU
# Toolchain路径
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
# 编译路径
CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-
SYSROOT=$NDK/platforms/$NDK_VERSION/arch-$ARCH
build_one
其中需要改的地方:
- NDK变量后的路径,改为自己本地的NDK对应的路径
- TOOLCHAIN改为相对应的路径
- CROSS_COMPILE改为自己对应的路径
注意:使用./configure --help
可查看所有的配置选项
4. 执行build_android
./build_android
经过十几分钟的编译之后,会在当前路径下生成/android/arm层级文件夹,如下图。