Java JNI的本意是Java Native Interface(Java本地接口),它是为了方便Java调用C、C++等本地代码所封装的一层接口。
NDK是Android所提供的一个工具集合,通过NDK可以在Android中更加方便的通过JNI来访问本地代码。NDK还提供了交叉编译器。
优点:
1、提高代码的安全性;
2、可以方便的使用目前已有的C/C++开源库;
3、便于平台间的移植;
4、提高程序某些特定情形下的执行效率。
一、JNI的开发流程
1、在Java中声明native方法
2、编译Java源文件得到class文件,然后通过javah命令导出JNI的头文件;
3、实现JNI方法;
4、编译so库并在Java中调用;
二、NDK的开发流程
1、下载并配置NDK
2、创建一个Android项目,并声明所需的native 方法;
3、实现Android项目中所声明的native方法;
4、切换到jni目录的父目录,然后通过ndk-build命令编译产生so库;
三、JNI的数据类型和类型签名
1、JNI数据类型包含两种:基本类型和引用类型
2、类型签名:L+包名+类名+;将其中的“.”替换为“/”;
比如:java.lang.String,它的签名:Ljava/lang/String;
四、JNI调用Java方法的流程
1、JNI调用Java方法的流程是
- 先通过类名找到类;
- 再根据方法名找到方法的id;
- 最后就可以调用这个方法了。
如果调用的是Java中的非静态方法,那么需要构造出类的对象后才能调用;
网友评论