据说重要的事情药说三遍:文章只代表个人见解!文章只代表个人见解!文章只代表个人见解!有些地方可能有错误的地方,敬请见谅!有不同见解请加QQ: 498099780 ;望多多指正!
一、准备环境
1、centos7.3(本人使用版本),windows系统可以装VMware虚拟机(不会的自己百度搜索把),本人用的是finalShell工具链接的虚拟机。
解压
unzip android-ndk-r17c-linux-x86_64.zip
如果出现:
unzip: 未找到命令
安装命令:
yum install -y unzip zip
3、FFmpeg(安装Linux系统上)
解压命令:
tar -xf FFmpeg-n4.0.2.tar.gz
4、配置Linux环境变量
打开 /etc/profile 文件配置环境ndk环境变量:
export NDK_ROOT=/android_ndk/android-ndk-r17c #配置你自己解压的路径,这个是我的路径
export PATH=$NDK_ROOT:$PATH
二、编写shell脚本
#!/bin/bash
#根据自己的路径配置
NDK_ROOT=/android_ndk/android-ndk-r17c
#toolchain 变量指向ndk中的交叉编译gcc所在的目录
TOOLCHAIN=$NDK_ROOT/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
#FLAGS与INCLUDES变量 可以从AS ndk工程的.externativeBuild/cmake/debug/armeabi-v7a/build.ninja中拷贝
FLAGS="-isystem $NDK_ROOT/sysroot/usr/include/aarch64-linux-android -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv8-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -std=c++11 -O0 -fPIC"
INCLUDES="-isystem $NDK_ROOT/sources/cxx-stl/llvm-libc++/include -isystem $NDK_ROOT/sources/android/support/include -isystem $NDK_ROOT/sources/cxx-stl/llvm-libc++abi/include"
# 执行configure脚本,用于生成makefile
#--prefix :安装目录
#--enable-small:优化大小
#--isable-programs:不编译ffmpeg可执行程序,我们需要获得静态(动态)库
#--disable-avdevice:关闭avdevice模块,此模块在android中无用
#--disable-encoderrs:关闭所有的编码器,只需要播放decoder即可。
#--disable-muxers:没有推流无需muxer模块(复用器,封装器),不需要生成mp4这种文件,所以关闭
#--disable-filters:关闭视频滤镜
#--enable-cross-compile:开启交叉编译(ffmpeg比较**跨平台**,并不是所有库都有这么happy的选项)
#--cross-prefix:ndk的特定gcc编译器前缀
#--disable-shared enable-static: 不写也可以,默认就是这样的
#--sysroot
#--extra-cflags
#--arch --target-os
#
#
PREFIX=./android/arm64-v7a #可以根据自己的配置
./configure \
--prefix=$PREFIX \
--enable-small \
--disable-programs \
--disable-avdevice \
--disable-encoders \
--disable-muxers \
--disable-filters \
--enable-cross-compile \
--cross-prefix=$TOOLCHAIN/bin/aarch64-linux-androideabi- \
--enable-shared \
--disable-static \hjjjkkj
--sysroot=$NDK_ROOT/platforms/android-21/arch-arm64 \
--extra-cflags="$FLAGS $INCLUDES" \
--extra-cflags="-isysroot $NDK_ROOT/sysroot" \
--arch=aarch64 \
--target-os=android
make clean
make
make install
将脚本 .sh 文件放再解压的ffmpeg的跟目录再执行。
目录结构
三、执行完毕脚本
看到以下目录证明你已经编译成功
执行完毕根据自己的配置
将目录copy到你的电脑上(本人用finalshell工具,很方便)。