本人最近在学习ndk 开发,由于用惯了AS 之后不想再去试用Eclipse 所以最近一个人再折腾 使用Android Studio 进行NDK 开发(使用ffmpeg进行练手)
由于是一个人自己再折腾,再加上白天也比较忙,晚上还经常加班 折腾了好久才搞明白
废话不多说 开始NDK 流程
一.创建一个NDK 工程
这一部其实非常简单,只需要在android studio 中 下载NDK 然后在新建项目的时候 勾选c++选项即可
二.NDK 主要部分分析
使用android studio 创建好NDK 工程之后 会发现NDK 工程主要有三部分组成
如图所示: NDK项目相对于 一般的工程而言 多了如上三个部分
1. .externalNativeBuild 该部分是使用cMake 编译成so库部分 该部分内容为自动生成 在实际项目中 不会过多的操作该部分
2. cpp 该部分是生成了一个cpp文件目录 用于存放c/c++代码
3.CMakeLists.txt 该部分是cMake的脚本配置部分 需要在这里进行相应的配置
出了上图所示内容外 gradle 也多了一小部分内容 如下图所示:
三配置CMakeLists.txt
其实 配置该文件比较简单 主要的配置有 三个方面
1.常规 (系统自带部分)
cmake_minimum_required(VERSION 3.4.1)
find_library( log-lib
log )
这两部分 第一行是 设置cmake的最低版本 第二部分是 cmake自带库
2加入c++部分
该部分分为两种 1.引用外部so库 2.引用本地c/c++代码
add_library( avutil-54 SHARED IMPORTED ) set_target_properties( avutil-54 PROPERTIES IMPORTED_LOCATION ../../../../libs/armeabi/libavutil-54.so )
改图为引用外部so库
add_library( native-lib SHARED src/main/cpp/native-lib.cpp )改图为引用本地c++代码
3.本地c++代码关联 和 外部so 库 引入头文件
include_directories(libs/include) target_link_libraries( native-lib swresample-1 avcodec-56 avfilter-5 swscale-3 avdevice-56 avformat-56 ${log-lib} )
四 编写本地c++ 代码
该部分 略。。。
五 打包apk
略。。