关于cmake语法,请参考这篇文章十三、cmake语法
build_android.sh-->configure-->makefile-->*.so
一、下载NDK
NDK Dowloads
android-ndk-r14b-linux-x86_64.zip
1.1 命令行下载
wget https://dl.google.com/android/repository/android-ndk-r13b-linux-x86_64.zip
wget url (该命令默认下载到当前目录)
wget -o new_file_name url (使用参数-o来指定一个文件名,以新的文件名保存)
1.2 解压
unzip android-ndk-r14b-linux-x86_64.zip
or for (*.tar.bz2)
tar -jxvf android-ndk-r14b-linux-x86_64 .tar.bz2
如果没有安装unzip,则需要通过以下命令安装:
apt-get install unzip
二、下载解压ffmpeg
2.1 下载FFmpeg源文件2.6.9的版本
wget http://ffmpeg.org/releases/ffmpeg-2.6.9.tar.gz
tar -xzvf ffmpeg-2.6.9.tar.gz
2.2 修改权限
chmod 777 -R ffmpeg-2.6.9
三、配置NDK环境变量
对当前用户进行环境变量配置
3.1 编辑.bashrc文档,添加ndk路径,配置环境变量
cd ~ (进入当前用户Home目录)
vim ~/.bashrc
在.bashrc最后添加:
export NDK_ROOT = /usr/chiang/ndk/android-ndk-r14b
export PATH=$NDK_ROOT:$PATH

3.2 执行.bashrc更新环境变量
source ~/.bashrc
3.3 验证ndk环境是否配置成功
ndk-build -v

四、编译FFmpeg
4.1 编写shell 脚本文件:build_android.sh
#!/bin/bash
make clean
export NDK=/usr/chiang/ndk/android-ndk-r14b
export SYSROOT=$NDK/platforms/android-9/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
export CPU=arm
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"
./configure --target-os=linux \
--prefix=$PREFIX --arch=arm \
--disable-doc \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
注意:./configure --target-os=linux \ "\"的作用是换行,所有"\"后面不能有空格
4.2 调用执行./build_android.sh开始进行编译
chmod 777 -R build_android.sh
./build_android.sh
初次编译后,生成so文件有问题:

解决方法:修改中/usr/chiang/ffmpeg/ffmpeg-2.6.9/configure的配置

具体修改:

#Line2779
#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)'
#By Chiang START
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
#By Chiang END
再次编译的结果:

虽然初次编译的so文件像libavcodec.so.56,在Linux中是可以正常加载的,但是在Android中则不能正常加载,所以需要修改so文件名的生成规则,使其生成为libavcodec.56.so,以方便在Android开发中的使用。
网友评论