为什么要用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.sh
1 #!/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所有的动态库了。
        在路上!

更多相关文章

  1. GDB调试Android代码——环境搭建及调试过程
  2. Android 动态解析网络布局
  3. Android 动态增加控件
  4. Android 主题动态切换框架:Prism
  5. 配置android环境遇到的问题及解决办法
  6. 无Mac机IOS开发环境搭建手记
  7. Android也架构之四:门面模式解析获取的html代码
  8. Android通过反射EthernetManager Api设置以太网为静态IP地址或者

随机推荐

  1. Android应用启动白屏问题
  2. android GridLayout。。。
  3. Android对话框使用详解(一)
  4. android 中定時器的幾種用法總結
  5. Android实现选择相册图片并显示功能
  6. Android:如何从堆栈中还原ProGuard混淆后
  7. Android之照相机的使用
  8. Android中Toast的具体使用
  9. Android Framework启动流程分析(一)
  10. android view组件draw onDraw,dispatchDra