Java JNI的本意是Java Native Interface(Java本地接口),是为了方便java调用C、C++等本地代码所封装的一层接口。
NDK是Android所提供的一个工具鸡盒,通过NDK可以在Android中更加方便地通过JNI来访问本地代码,NDK还提供了交叉编译器,开发人员只需要简单地修改mk文件就可以生成特定CPU平台的动态库。
使用NDK的好处:
提高代码的安全性
可以很方便地使用目前已有的C/C++开源库
便于平台间的移植。
提高程序在某些特定情况下的执行效率,但是并 不能明显提高Android程序的性能
JNI和NDK假发所用到的动态库的格式是以.so为后缀的文件
JNI的开发流程
1、在java中声明native方法
声明了两个native方法:get和set,这两个就是需要在JNI中实现的方法
生成class文件需要先退到java中才可以:
生成JNI头文件生成一个animation_com_myandfix_MyJni.h文件:
头文件函数名的格式遵循如下规则:Java_包名_类名_方法名
JNIEnv *:表示一个指向JNI环境的指针,可以通过它来访问JNI提供的接口方法
jobject:表示java对象中的this
JNIEXPORT和JNICALL:他们是JNI中所定义的宏,可以在jni.h这个头文件中查找到
jstring:表示java对象中的String
它指定extern“C”内部的函数采用C语言的命名风格来编译。否则当JNI采用C/C++来实现时,由于C和C++编译过程中对函数的命名风格不同,这将导致JNI在链接时无法根据函数名查找到具体的函数,那么JNI调用就无法完成。
实现JNI方法
JNI方法是指Java中声明的native方法,这里可以选择使用C++或者C来实现:
例子:
c++ c编译so库并在java中使用
如果使用NDK,Android studio的话,则先导入NDK,后设置有关数据,链接如下:
网友评论