这里主要翻译了JNI的常用接口文档。具体实例根据实际项目后续给出
文档来自
http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html#wp9502
Interface Function Table
每个函数都可以通过JNIEnv参数访问,JNIEnv类型是指向一个存放所有JNI接口指针的结构的指针,其定义如下:
typedef const struct JNINativeInterface *JNIEnv;
在JNIEnv指针中,分别包含以下接口:
1、获取版本信息
jint GetVersion(JNIEnv *env);
返回本地方法接口的版本信息
In JDK/JRE 1.1, GetVersion() returns 0x00010001.
In JDK/JRE 1.2, GetVersion() returns 0x00010002.
In JDK/JRE 1.4, GetVersion() returns 0x00010004.
In JDK/JRE 1.6, GetVersion() returns 0x00010006.
2、类操作
定义类
jclass DefineClass(JNIEnv *env, const char *name, jobject loader,const jbyte *buf, jsize bufLen);
从包含类数据的buffer中加载类,该buffer包含类调用时未被虚拟机所引用的原始类数据。
参数:
env:JNI接口指针
name:带定义的类名称或者接口名称,该字符串由modified UTF-8编码。
loader:指派给定义的类的类加载器
buf:包含.class文件数据的buffer
bufLen:buffer长度
返回:
JAVA类对象,当错误出现时返回NULL
查找类
jclass FindClass(JNIEnv *env, const char *name);
JDK release 1.1, 该函数加载一个本地定义类,它搜索CLASSPATH环境变量里的目录及zip文件查找特定名字的类。
自从Java 2 SDK release 1.2,Java安全模型允许非系统类加载跟调用本地方法。该函数
参数:
env:JNI接口指针
name:一个完全限定类名,即包名+“/”+类名,如java.lang.String 类,该参数为:”java/lang/String”;如果类名以”[“开头,将返回一个数组类。数组类型签名的数组类class java.lang.Object[],该参数应为:”[Ljava/lang/Object;”
返回:
返回对应完全限定类对象,当找不到该类时返回NULL
jclass GetSuperclass(JNIEnv *env, jclass clazz);
jboolean IsAssignableFrom(JNIEnv *env, jclass clazz1,jclass clazz2);