经过 上一篇博客的步骤后,生成了八个带版本号的 .so 库,接下来进行导入 NDK 项目的操作

第一步:用 Android Studio 新建 FFmpegDemo 项目,注意勾选 include c++ support 选项


项目创建完成后,在 libs/ 下新建 armeabi/inlcude/目录,并将上一篇博客中生成的 android/arm/include 目录下的文件放入 include 目录,android/arm/lib 下的带版本号的 .so 文件放入 armeabi/目录,如下所示:

第二步:修改 CMakeLists.txt 文件的内容如下:

# 指定 cmake 最小版本cmake_minimum_required(VERSION 3.4.1)# 最终生成的共享库命名为:native-lib,源文件路径在 src/main/cpp/native-lib.cppadd_library( native-lib             SHARED             src/main/cpp/native-lib.cpp )# 寻找 log 库,然后赋值给 log-lib,用于在 NDK 开发中输出 Log 信息find_library(log-lib log)# 指定 include 头文件所在路径include_directories(libs/include)# 设置根目录变量 DIRset(DIR ../../../../libs)# 这一句和 下面的 set_target_properties 这一句表示,# 将 armeabi 目录下的 libavcodec-56.so 导入为 avcodec-56 库,并且在项目中引用# 下面的七组功能类似。 注意:add_library 中的 avcodec-56 命名 需要与 .so 库的命名一致# 去掉前缀 lib 和后缀 .soadd_library( avcodec-56             SHARED             IMPORTED )set_target_properties( avcodec-56                       PROPERTIES IMPORTED_LOCATION                       ${DIR}/armeabi/libavcodec-56.so                     )#add_library( avdevice-56             SHARED             IMPORTED )set_target_properties( avdevice-56                       PROPERTIES IMPORTED_LOCATION                       ${DIR}/armeabi/libavdevice-56.so                     )#add_library( avfilter-5             SHARED             IMPORTED )set_target_properties( avfilter-5                       PROPERTIES IMPORTED_LOCATION                       ${DIR}/armeabi/libavfilter-5.so                     )#add_library( avformat-56             SHARED             IMPORTED )set_target_properties( avformat-56                       PROPERTIES IMPORTED_LOCATION                       ${DIR}/armeabi/libavformat-56.so                     )#add_library( avutil-54             SHARED             IMPORTED )set_target_properties( avutil-54                       PROPERTIES IMPORTED_LOCATION                       ${DIR}/armeabi/libavutil-54.so                     )#add_library( postproc-53             SHARED             IMPORTED )set_target_properties( postproc-53                       PROPERTIES IMPORTED_LOCATION                       ${DIR}/armeabi/libpostproc-53.so                     )#add_library( swresample-1             SHARED             IMPORTED )set_target_properties( swresample-1                       PROPERTIES IMPORTED_LOCATION                       ${DIR}/armeabi/libswresample-1.so                     )#add_library( swscale-3             SHARED             IMPORTED )set_target_properties( swscale-3                       PROPERTIES IMPORTED_LOCATION                       ${DIR}/armeabi/libswscale-3.so                     )# 最终生成 native-lib 库,以及生成所依赖的其他的库target_link_libraries( native-lib                       avcodec-56                       avdevice-56                       avfilter-5                       avformat-56                       avutil-54                       postproc-53                       swresample-1                       swscale-3                       ${log-lib}                        )

第三步:在 MainActivity 中加载 .so 库

注意:native-lib 需要写在最下面

第四步:修改 app module 下的 build.gradle 文件

在 android.defaultConfig 下,添加如下内容:


指定 abi 架构 为 armeabi,以及指定 jniLibs 所在目录

第四步:在 native-lib.cpp 中添加如下头文件引用

#include #include #include // 告诉编译器按照 C 的规则去编译函数extern "C" {//编码#include "libavcodec/avcodec.h"//封装格式处理#include "libavformat/avformat.h"//像素处理#include "libswscale/swscale.h"}#define LOGI(FORMAT, ...) __android_log_print(ANDROID_LOG_INFO,"jason",FORMAT,##__VA_ARGS__);#define LOGE(FORMAT, ...) __android_log_print(ANDROID_LOG_ERROR,"jason",FORMAT,##__VA_ARGS__);

最后在 stringFromJNI 方法中添加两个函数:

LOGE("测试 log");av_register_all();

最终效果如下:

最后,运行项目,并生成 APK,如果没有报错,则表示引用 ffmpeg 库到 android 项目成功了

更多相关文章

  1. 《Android经验分享》周刊第7期
  2. Android(安卓)NDK开发之旅(2):Android(安卓)Studio中使用CMake进
  3. Android(安卓)NDK 简介
  4. Android(安卓)NDK
  5. Visual Studio 跨平台開發實戰(4) - Xamarin Android(安卓)基本
  6. 通过ant脚本,编译打包android工程
  7. 面向 Android(安卓)的 Google 项目:Google API
  8. Hello World Kotlin
  9. 进入android项目组的第一天

随机推荐

  1. Android Activity& service&Broadcast re
  2. CTS概述
  3. 保护你的隐私,五种控制Android应用的权限
  4. Android中的智能指针
  5. Android(安卓)RIL的java框架
  6. Android中用seekbar控件控制歌曲的进度
  7. Android(安卓)so lib库远程http下载和动
  8. Android开发实践:掌握Camera的预览方向和
  9. Android里透明的ListView
  10. android6.0M系统在代码中实现请求以及检