使用NDK编译Android所需的FFMPEG动态库
为什么要用NDK编译:
对于开发Android的小伙伴,对于NDK肯定不会感到陌生。在Android世界里联通java和c代码的利器jni就离不开NDK。作为一名
合格的程序猿,在学习工作中肯定会有需要用到网络上的各种开源库,所以首先,我们需要能够编译出我们需要的动态库。
为什么要用NDK编译呢?一般Linux系统默认都会有安装gcc编译器,使用gcc就可以编译动态库,但是编出来的库在Android设备
上是用不了(以PC架构为x86,移动设备架构为arm为例,大都数情况是这样的),因为架构不同,动态库没办法通用。这个时候你
可以搭建arm交叉编译环境,对于Android小伙伴建议使用NDK,它已经集成了arm交叉编译环境,使用起来相对还是挺方便的。而且
使用jni时候的时候也少不了要用到它。
第一步:源代码下载
源码可以去FFMPEG官网(https://ffmpeg.org)下载最新源代码,怎么下载以及需要下载哪个版本,在这里就不赘述了。提醒
一下使用git下载的小伙伴,下面的git语句可能是下不下来的,坑已填,用http替换https试试!
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
第二步:去版本后缀
到这里,应该已经在Linux环境下载好了源码了吧。
FFMPEG默认编译出来的库后缀是有加版本号的,这种Android上似乎是加载不了哇!别着急,稍微改改就成。将configure文件
中的下面四行:
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)'
第三步:编译
磨刀不误砍柴功,先写个编译脚本一劳永逸。vi build_android.sh1 #!/bin/bash 2 NDK=/home/Android/NDK/android-ndk-r13b 3 SYSROOT=$NDK/platforms/android-23/arch-arm/ 4 TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 5 6 function build_one 7 { 8 ./configure \ 9 --prefix=$PREFIX \ 10 --enable-shared \ 11 --disable-static \ 12 --disable-doc \ 13 --disable-ffserver \ 14 --enable-cross-compile \ 15 --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ 16 --target-os=linux \ 17 --arch=arm \ 18 --sysroot=$SYSROOT \ 19 --extra-cflags="-Os -fpic $ADDI_CFLAGS" \ 20 --extra-ldflags="$ADDI_LDFLAGS" \ 21 $ADDITIONAL_CONFIGURE_FLAG 22 } 23 CPU=arm 24 PREFIX=$(pwd)/android/$CPU 25 ADDI_CFLAGS="-marm" 26 build_one
NDK是机器上NDK代码的路径,需要换成对应的,SYSROOT和TOOLCHAIN如果目录存在的话,可以不用修改。然后给脚本可执行权限, chmod +x build_android.sh。./build_android.sh执行生成Makefile。 然后执行make -j8 && make install成功后,就会在指定的$PREFIX目录下生成FFMPEG所有的动态库了。 在路上!
更多相关文章
- GDB调试Android代码——环境搭建及调试过程
- Android 动态解析网络布局
- Android 动态增加控件
- Android 主题动态切换框架:Prism
- 配置android环境遇到的问题及解决办法
- 无Mac机IOS开发环境搭建手记
- Android也架构之四:门面模式解析获取的html代码
- Android通过反射EthernetManager Api设置以太网为静态IP地址或者