Linux系统下编译mp4v2生成Android下使用的So文件

一、需求背景

之前一直用到了mp4v2这个库,使用库进行MP4的文件录制,一直使用 的是armeabi类型的so文件,后来由于AS的更新,将不再支持armeabi格式的so文件,所以才需要编译不同类型的so文件以支持项目的健壮性。而且armeabi-v7a的兼容性更好。

二、在Ubuntu下安装ndk环境

Android NDK 安装配置指南
可以根据安装指南初步编译sample工程。

三、编译mp4v2

通过第一步的sample工程的试手,我们可以知道,如果要编译工程,先需要编写对应的.mk文件。
1.android 编译mp4v2 2.0.0生成动态库
2.Android平台的Android.mk和Application.mk

第一个链接是百度上面找的,找了很多资料,很多都是参考第一个资料进行编译的。第二个资料是GITHUB上面的一个开源项目,看起来还不错,但是第二个作者将整个项目编译成了许多不同的小包。所以我需要将第一个和第二个进行整合一下。
1). 下载[2]中的项目,调整一下目录结构,在mp4v2-master目录下面新建jni目录,将其他文件都考入jni目录。
2). 将jni目录下的Android.mk里面的内容替换如下

#----------------------------------------------------
# Author: momo0853@live.com
# Time  : 2016年 04月 20日 星期三 17:34:45 CST
#----------------------------------------------------
#
# This is an automatically generated file, in order to reduce repetitive work.
# Android.mk: For more details, please see "http://developer.android.com/ndk/guides/android_mk.html".
# Application.mk: For more details, please see "http://developer.android.com/ndk/guides/application_mk.html".
# Can identify the suffix for .c .cc .cpp and .a .so.LOCAL_PATH := $(call my-dir)libmp4v2_la_SOURCES := \src/3gp.cpp                          \src/atom_ac3.cpp                     \src/atom_amr.cpp                     \src/atom_avc1.cpp                    \src/atom_avcC.cpp                    \src/atom_chpl.cpp                    \src/atom_colr.cpp                    \src/atom_d263.cpp                    \src/atom_dac3.cpp                    \src/atom_damr.cpp                    \src/atom_dref.cpp                    \src/atom_elst.cpp                    \src/atom_enca.cpp                    \src/atom_encv.cpp                    \src/atom_free.cpp                    \src/atom_ftyp.cpp                    \src/atom_ftab.cpp                    \src/atom_gmin.cpp                    \src/atom_hdlr.cpp                    \src/atom_hinf.cpp                    \src/atom_hnti.cpp                    \src/atom_href.cpp                    \src/atom_mdat.cpp                    \src/atom_mdhd.cpp                    \src/atom_meta.cpp                    \src/atom_mp4s.cpp                    \src/atom_mp4v.cpp                    \src/atom_mvhd.cpp                    \src/atom_nmhd.cpp                    \src/atom_ohdr.cpp                    \src/atom_pasp.cpp                    \src/atom_root.cpp                    \src/atom_rtp.cpp                     \src/atom_s263.cpp                    \src/atom_sdp.cpp                     \src/atom_sdtp.cpp                    \src/atom_smi.cpp                     \src/atom_sound.cpp                   \src/atom_standard.cpp                \src/atom_stbl.cpp                    \src/atom_stdp.cpp                    \src/atom_stsc.cpp                    \src/atom_stsd.cpp                    \src/atom_stsz.cpp                    \src/atom_stz2.cpp                    \src/atom_text.cpp                    \src/atom_tfhd.cpp                    \src/atom_tkhd.cpp                    \src/atom_treftype.cpp                \src/atom_trun.cpp                    \src/atom_tx3g.cpp                    \src/atom_udta.cpp                    \src/atom_url.cpp                     \src/atom_urn.cpp                     \src/atom_uuid.cpp                    \src/atom_video.cpp                   \src/atom_vmhd.cpp                    \src/cmeta.cpp                        \src/descriptors.cpp                  \src/exception.cpp                    \src/enum.tcc                         \src/isma.cpp                         \src/log.cpp                          \src/mp4.cpp                          \src/mp4atom.cpp                      \src/mp4container.cpp                 \src/mp4descriptor.cpp                \src/mp4file.cpp                      \src/mp4file_io.cpp                   \src/mp4info.cpp                      \src/mp4property.cpp                  \src/mp4track.cpp                     \src/mp4util.cpp                      \src/ocidescriptors.cpp               \src/odcommands.cpp                   \src/qosqualifiers.cpp                \src/rtphint.cpp                      \src/text.cpp                         \libmp4v2_la_SOURCES += \src/bmff/typebmff.cpp  \libmp4v2_la_SOURCES += \src/itmf/CoverArtBox.cpp  \src/itmf/Tags.cpp         \src/itmf/generic.cpp      \src/itmf/type.cpp         \libmp4v2_la_SOURCES += \src/qtff/ColorParameterBox.cpp      \src/qtff/PictureAspectRatioBox.cpp  \src/qtff/coding.cpp                 \libmp4v2_la_SOURCES += \libplatform/io/File.cpp              \libplatform/io/FileSystem.cpp        \libplatform/prog/option.cpp          \libplatform/sys/error.cpp            \libplatform/time/time.cpp            \libmp4v2_la_SOURCES += \libplatform/io/File_posix.cpp          \libplatform/io/FileSystem_posix.cpp    \libplatform/number/random_posix.cpp    \libplatform/process/process_posix.cpp  \libplatform/time/time_posix.cpplibmp4v2_la_SOURCES += \libutil/Database.cpp       \libutil/Timecode.cpp       \libutil/TrackModifier.cpp  \libutil/Utility.cpp        \libutil/crc.cpp            \libutil/other.cpp          \include $(CLEAR_VARS)
LOCAL_MODULE     := libmp4v2
LOCAL_ARM_MODULE := armLOCAL_CFLAGS := -fno-rtti -fexceptions
#LOCAL_EXPORT_CFLAGS := $(LOCAL_CFLAGS)
LOCAL_SRC_FILES := $(libmp4v2_la_SOURCES)LOCAL_C_INCLUDES := \$(LOCAL_PATH)/include \$(LOCAL_PATH)/vstudio9.0/include \$(LOCAL_PATH)/libutil \$(LOCAL_PATH)/libutil/include \$(LOCAL_PATH)/libplatform \$(LOCAL_PATH)/libplatform/include \$(LOCAL_PATH)
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_C_INCLUDES)#LOCAL_SHARED_LIBRARIES := \
#    libutils \
#    libbinder \
#    libcutils
LOCAL_CXXFLAGS :=-fexceptions -Wno-write-strings
LOCAL_CPPFLAGS := -O2 -fexceptions -DHAVE_SOCKLEN_T -DHAVE_STRUCT_IOVEC
LOCAL_MODULE_TAGS := optional
include $(BUILD_SHARED_LIBRARY)

3). 进入到mp4v2-master/jni目录运行 ndk-build命令即可进行编译
4). 如果需要编译全部类型的so文件,只需要将Application.mk文件下面 APP_ABI 修改成all即可。

四、编译结果

chezi008@master:~/AndroidStudioProjects/mp4v2-master/jni$ ndk-build
Android NDK: WARNING: Unsupported source file extensions in Android.mk for module mp4v2
Android NDK:   src/enum.tcc
[armeabi-v7a] Compile++ thumb: mp4v2 <= 3gp.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_ac3.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_amr.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_avc1.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_avcC.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_chpl.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_colr.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_d263.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_dac3.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_damr.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_dref.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_elst.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_enca.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_encv.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_free.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_ftyp.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_ftab.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_gmin.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_hdlr.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_hinf.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_hnti.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_href.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_mdat.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_mdhd.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_meta.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_mp4s.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_mp4v.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_mvhd.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_nmhd.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_ohdr.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_pasp.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_root.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_rtp.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_s263.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_sdp.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_sdtp.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_smi.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_sound.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_standard.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_stbl.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_stdp.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_stsc.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_stsd.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_stsz.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_stz2.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_text.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_tfhd.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_tkhd.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_treftype.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_trun.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_tx3g.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_udta.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_url.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_urn.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_uuid.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_video.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= atom_vmhd.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= cmeta.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= descriptors.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= exception.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= isma.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= log.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= mp4.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= mp4atom.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= mp4container.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= mp4descriptor.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= mp4file.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= mp4file_io.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= mp4info.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= mp4property.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= mp4track.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= mp4util.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= ocidescriptors.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= odcommands.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= qosqualifiers.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= rtphint.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= text.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= typebmff.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= CoverArtBox.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= Tags.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= generic.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= type.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= ColorParameterBox.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= PictureAspectRatioBox.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= coding.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= File.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= FileSystem.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= option.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= error.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= time.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= File_posix.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= FileSystem_posix.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= random_posix.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= process_posix.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= time_posix.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= Database.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= Timecode.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= TrackModifier.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= Utility.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= crc.cpp
[armeabi-v7a] Compile++ thumb: mp4v2 <= other.cpp
[armeabi-v7a] SharedLibrary  : libmp4v2.so
[armeabi-v7a] Install        : libmp4v2.so => libs/armeabi-v7a/libmp4v2.so

全类型So文件下载

编译了这么久,传上来给大家共享一下都觉得不好意思,因为ubuntu确实太难捣鼓了,为了编译这东西,又是装LINUX系统,又是学习.mk文件里面属性的作用,确实麻烦。
下载地址:https://download.csdn.net/download/chezi008/10412717

Android 编译so文件 MP4V2相关推荐

  1. android编译.a文件,Android 7.1源码编译导入AS完整教程

    本教程仅针对Android 7.1系统,为便于虚拟机备份和出现问题时的还原,本教程分为3步:初始化编译环境.源码同步.编译源码导入Android Studio. 编译源码:Android7.1.2_r ...

  2. android 编译bin文件,Android编译自己的程序到/system/bin

    背景 有时候我们想创建一个程序,放在系统中,供其他APP执行.我们知道,在生成system.img的时候,编译系统会将out/target/product/[product]/system/bin目录 ...

  3. Xamarin.Android编译提示找不到mscorlib.dll.so文件

    Xamarin.Android编译提示找不到mscorlib.dll.so文件 错误信息:AOT module 'mscorlib.dll.so' not found: Cannot load lib ...

  4. 【Android 逆向】Android 进程注入工具开发 ( 编译注入工具 | 编译结果文件说明 | 注入过程说明 )

    文章目录 一.编译注入工具 二.编译结果文件说明 三.注入过程说明 一.编译注入工具 在 Visual Studio 2019 中打开了一个 " 生成文件项目 " , 该项目就是注 ...

  5. Android 重新编译资源文件

    在开发过程中,尤其是Framework相关开发时,有时候需要重新编译资源文件.编译顺序和注意事项如下: 1,资源文件位置:frameworks/base/core/res 2,编译后生成的文件:fra ...

  6. android.mk编译动态库,安卓之Android.mk多文件以及动态库编译

    1.多文件编译 多文件编译共有两种方式: (1) 在Android.mk中一一添加 LOCAL_PATH:= $(call my-dir) #定义当前模块的相对路径 include $(CLEAR_V ...

  7. android编译系统apk文件,VS2012中MonoForAndroid打包编译APK文件详细图文教程

    本文用于介绍Visual Studio 2012中Xamarin Mono For Android 如何打包编译APK文件,从如何创建Android项目,到如何启动调试,都会逐个配图讲解. 1 新建项 ...

  8. Xamarin For Android 打包编译APK文件详细图文教程

    原文链接 本文用于介绍Visual Studio 2012中Xamarin Mono For Android 如何打包编译APK文件,从如何创建Android项目,到如何启动调试,都会逐个配图讲解. ...

  9. Android 重新编译资源文件(touch)

    在编译Android的模块时会用mm快速编译,但如果只是修改一些资源图片后执行mmm,却没有编译到: No private recovery resources for TARGET_DEVICE g ...

最新文章

  1. 区块链兼容以太坊智能合约
  2. WordPress漏洞扫描工具WPScan
  3. UNIX网络编程——UDP缺乏流量控制(改进版)
  4. linux samba代码,Linux下Samba服务器源码安装及配置
  5. ELK日志管理之——elasticsearch部署
  6. 将给定数据源生成静态HTML页面持久化到项目之外的硬盘
  7. 20165234 《Java程序设计》第五周学习总结
  8. python绘制散点图的步骤_python如何绘制散点图?
  9. SQL中多表查询:左连接、右连接、内连接、全连接、交叉连接
  10. 代码流程图_助力理解js代码,进阶JavaScript代码能力——js2flowchart
  11. 实操调试成功 基于NI-VISA的USBTMC接口程控仪器连接
  12. 10个最佳QR码二维码和条形码Javascript库
  13. ORB_SLAM2源码阅读(一)概要
  14. smali语言程序流程控制语法
  15. 国产无线充电宝哪个牌子好?国产无线充电宝品牌排行
  16. 读书笔记002:《伤寒论》-十二经络
  17. 谷歌浏览器控制台如何切换中英文?
  18. PDF不能复制或编辑:用Adobe acrobat将扫描版PDF转换为可编辑版本
  19. UFD203A101 3BHE019361R0101电 工理论、电子技术、信息处理、控制理论、电力系统分析
  20. (二)requests爬取智能合约账户地址及其交易记录

热门文章

  1. JavaScript基本语法,函数,流程控制
  2. HPU 18级个人训练 11月15日
  3. 集成电路测试简介(1)
  4. Netbeans 'badly formed maven project' 问题
  5. 独家 |如何创造性地应用深度学习视觉模型于非视觉任务(附代码)
  6. 夜深人静写算法(七)- 字典树
  7. logback实现日志信息脱敏
  8. 国外数据采集的10个经典方法
  9. Blender建模01_新月玫瑰
  10. 公路施工过程中作业重点和技术完善