Android studio 3.1中在已有的项目中进行JNI开发
相信大家对JNI并不陌生,它的主要作用就是链接java层与navtive层,虽说在我们应用等用纯java的api完全能够满足我们的项目需求,但是在有些地方我们需要进行底层优化,那么此时会写jni就很必要了,比如说视频开发的时候就需要我们手动写jni的api了。接下来我就已有的android项目中进行jni的开发做一次记录。
对于在创建项目中直接创建带jni相关的配置,我这里就不说明了,网上一大堆,而且也很简单。
首先我们创建一个正常的module,也就是跟我们平时创建module一摸一样,接下来jni就正式开始了。我们在MainActivity中添加一个native方法以及添加包的导入。
在我们添加完成本地方法之后就进行rebuild project,这时我们会发现在目录下有MainActivity.class文件。
到此处,说明我们第一步是成功的了。接下来就是生成头文件.h文件了。我们控制台中进入到java目录中,然后执行
javah 包名.类名 生成头文件,类似于这样:
这样就会在你的包名下多出这个文件:lml_molin_com_jnitest3_MainActivity.h,然后我们手动在main目录下创建一个
jni文件夹,我们将这个.h文件拷贝过去,然后在jni目录下将该文件复制一份,将后缀名修改为.c/.cpp,我们就要在这
里面进行native的具体实现了,类似于这样:
在我的demo中写的方法是对两个数进行简单的相加,我们也可以做一些其他复杂的操作,比如对文件的操作,内存的操作等等,
但是我们要对c/c++的相关api要了解,具体的大家自行了解。
下面就是要进行相关配置了,先看图,我们对照图解释:
在这里面,我们只需要关注这三个地方,两个externalNativeBuild模块以及一个ndk模块,现在说明下他们的作用,第一个externalNativeBuild的作用是生成哪些平台的so库,第二个的作用就是指定我们用什么文件生成我们的so库,ndk模块是我们生成so库的时候的名称,现在就需要CMakeLists.txt文件了,类似于下面这个:
在这个文件注意配置我们自己的c文件,类似于那个MainActivity.c的文件,上面那个hello就是我们生成的so库的名称。
配置完这些之后我们在进行一次rebuild project,这个时候so库就生成了,so所在的位置是:
这样,我们的so就可以拿去使用了。最后看看我们使用的结果:
以次记录下,如果不正确的 请指正,大家一起学习学习!!!