AndroidStudio NDK的接入填坑记

来源:互联网 发布:2017网络情歌 编辑:程序博客网 时间:2024/05/17 14:25

近一周的时间里,由于项目中需要用到FFmpeg(一款强大的音视频操作开源项目,据说可以用来写播放器什么的)编解码项目,这么大牛的项目又是开源的注定是十分复杂的,所以在Android接入这一方面还是又机智的大牛做了尝试的,android接入 不过这是接入Skype的silk编码,不过道理都是一样的,废话不多说!进入主题,
一.环境准备
Ubuntu 16.04;
ndk-r10d;
AndroidStudio(之后才意识到在sdkManager下载好的ndk比较快,推荐这种方式下载);
FFmpeg(注意选择版本下载)
具体的下载安装我就不说了 ,我们接入android是不需要将FFmpeg其在Ubuntu中编译的,主要源码就好,我第一次弄的时候就失足在Ubuntu中编译了FFmpeg,也无害。
如果不是在AndroidStudio中下载的ndk最好设置一下环境变量,虽然在这里用处不大。
二.在NDK中编译.so
这个过程是比较麻烦的,有个大神的博客很好逝者已矣,愿天堂美好,盗用里面的一张图
这里写图片描述
整个步骤包括现将ffmpeg利用NDK编译成适应android指令集的动态库(这个依赖于c语言代码有没有适配不同的cpu指令集),通过编写JNI调用so库。其中图中的Moudule Source(*.c)部分就是原生c
语言调用so库。
首先修改configure配置文件,这只是ffmpeg需要这样做,其他的不同的库,最好参考REDEME文件,这个参考雷大神的博客这里写链接内容
我说说我遇到的坑,他的步骤是configure,make,make install三大步,在configure这一步的时候,书写的build脚本在执行的时候,总是出现未找到命令的提示,总是无法编译成功,经过google大神的帮助后,找到合适的解决方法,(这可是花了一天的时间啊!哭晕在厕所)网址是大神地址,编译成功后会在相应的文件夹中出现(在configure中设置)相应的so文件以及相应的头文件,编译完成后产生的相应的so文件,注意!配置文件如图:
指定编译适合的架构

三.在AndroidStudio中的java中接入so
这个过程首先我们得会写一个jni的helloworld,由于AndroidStudio在2.2后引进了CMake编译套件,加上之前的ndk的手动编译就有两种方式(CMake只是将编译的工作集成简化)运用ndk-build的方式建议之前推荐的雷大神的博客来操作,我在这里只说几点我的感悟。
1.Android.mk是编译知道文件需要理解
2.jni调用时函数的名称一定要按照规则来: Java_com_skystudio_ndkdemo_NativeUtils_strFromNdk( JNIEnv* env,jobject thiz )
3.ndk-build结束后可以将so文件放入jniLibs文件夹中,就可以将c源码删除了

0 0
原创粉丝点击