基于Andriod Studio 2.3.1的JNI开发笔记
基于Andriod Studio 2.3.1的JNI开发笔记
前言
最近因项目需要,开发安卓音箱,可是有AudioTrack做网络播放的时候,延迟比较大。改用本地录制再直接播放,依然如此,后来利用AudioRecord,然后发送给STM32做成的音箱,却听不出延迟,查了资料才知道由于安卓系统的调度,AudioTrack播放的时候是有些延迟,问了以前做APP开发的同事,既然都不知道会有这些现象。
经过查阅,才知道安卓可以跳过框架直接操作底层硬件接口。即是JNI。经过几天的自学,了解JNI的用途,和如何使用JNI。首先是在电脑上实现Java和C/C++之间程序互调,然后在到AS上做了基本的demo。本文便于本人以后在AS上做JNI开发而做的笔记。(时间:2019/12/9)
由于本来自己是做单片机开发的,对于安卓开发是初学。所以在AS在做链接库以及如何进行连接上花了一些时间。于是有多做了几遍相同的练习加深印象。
AS的JNI开发流程
1、创建项目
这里直接一直next到完成就行,有的说要把Include C++ Support,但即使没选上好像也是可以,具体有什么作用以后如果接触到在回来补充吧。(时间:2019/12/9)
2、设置项目配置
local.properties 中添加ndk路径,如本人的NDK路径为ndk.dir=D:\Android\sdk\ndk-bundle。结果如下图:
在gradle.propertiest中设置对低版本NDK支持,android.useDeprecatedNdk=true;结果如图:
3、写java代码,
创建JNI的Java类,然后创建native方法;如图
然后make project得到class。
创建jni文件夹,然后利用Terminal在jni目录下生成.h头文件,然后编写编写接口函数的C文件
接下来,在jni目录下,新建并编写C代码,如图:
接着在jni文件夹下新建Android.mk和Application.mk文件。
然后在Terminal中调用ndk-build实现库的生成。结果如图:
4、库的调用和使用
在src中的buil.gradle中添加调用语句
然后rebuilde project。然后添加调用代码如下
最后一步就是运行,根据实际机器或者模拟器情况,设置并运行程序,结果如下