FFmpeg android交叉编译脚本

ndk-r14b

#!/bin/bash
#指定NDK的路径
NDK=/root/ffmpeg/android-ndk-r14b

#指定架构下的SO库和头文件,这里基于android 5.0(21)的arch-arm架构平台下的头文件,库文件,也就是需要调用的安卓的一些库文件
PLATFORM=$NDK/platforms/android-21/arch-arm

#交叉编译工具,用到的不同平台对应的工具集,这里在liunx上做交叉编译则是liunx-x86_64,如果是win则为对应的win
#谁在用: liunx-x86_64, 用在哪: arm-liunx-androideabi,包含了所有的交叉编译工具比如gcc, g++, nm等
TOOLCHAIN=$NDK/toolchains/arm-liunx-androideabi-4.9/prebuilt/liunx-x86_64

function buildFF {

./configure \
    --prefix=$PREFIX  \ #输出的路径,不解释
    --target-os=android \ #目标系统,貌似老版本不指定也行,新版本3.4不指定貌似会报错
    --cross-prefix=$TOOLCHAIN/bin/arm-liunx-androideabi- \ #编译的工具链前缀,编译时每个工具都加这么一个前缀
    --arch-arm \
    --cpu=$CPU \
    --sysroot=$PLATFORM \ #指定系统的路径
    --extra-cflags="$CFLAG" \
    --cc=$TOOLCHAIN/bin/arm-liunx-androideabi-gcc \  #gcc
    --nm=$TOOLCHAIN/bin/arm-liunx-androideabi-nm \ #nm符号查看工具
    --enable-shared \ #编译成动态库,有些低版本的库名字貌似不太对,需要改,3.4版本后没这个问题了
    --enable-runtime-cpudetect \ #
    --enable-gpl \
    --enable-small \
    --enable-cross-compile \
    --disable-debug \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-postproc \
    --disable-avdevice \
    --disable-symver \
    --disable-stripping \
    $ADD

    make
    make install
}

#这里假设编译两个版本为例
######################################################################
#编译支持neon和硬编码
#指定给GCC提供的一些参数,动态连接库的参数等
#指定CPU的输出类型
CPU=armv7-a
#输出的路径,当前目录下的anroid路径
PREFIX=./android/$CPU-neon-hard
CFLAG=-I$PLATFORM/usr/include -fPIC -DANDROID -mfpu=neon -mfloat-abi=softfp
ADD="--enable-asm \
    --enable-neon \
    --enable-jni \
    --enable-mediacodec \
    --enable-decoder=h264_mediacodec \
    --enable-hwaccel=h264_mediacodec "
buildFF

###########################################################################
#编译不支持neon和硬编码
#指定CPU的输出类型
CPU=armv7-a
#输出的路径,当前目录下的anroid路径
PREFIX=./android/$CPU
CFLAG=-I$PLATFORM/usr/include -fPIC -DANDROID -mfpu=vfp -mfloat-abi=softfp
ADD=
buildFF

 

ndk-r21d

#!/bin/bash
NDK=/data/app/android-ndk-r21d
API=21 
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64

build()
{
./configure \
--prefix=$PREFIX \
--disable-static \
--enable-shared \
--enable-small \
--enable-gpl \
--disable-doc \
--disable-programs \
--disable-avdevice \
--enable-cross-compile \
--target-os=android \
--arch=$ARCH \
--cc=$CC \
--cross-prefix=$CROSS 

make clean
make -j4
make install
}
########################################################
#armv7-a
ARCH=armv7
PREFIX=./android/$ARCH
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CROSS=$TOOLCHAIN/bin/arm-linux-androideabi-
build

########################################################
ARCH=arm64
PREFIX=./android/$ARCH
ARCH2=aarch64
CC=$TOOLCHAIN/bin/$ARCH2-linux-android$API-clang
CROSS=$TOOLCHAIN/bin/$ARCH2-linux-android-
build