JNIEnv 类型
JNIEnv类型实际上代表了Java环境,通过这个JNIEnv* 指针,就可以对Java端的代码进行操作。
- 创建Java类中的对象
- 调用Java对象的方法
- 获取Java对象中的属性
注意,C++和C中JNIEnv声明有区别。
- 在C++环境中, JNIEnv是 JNIEnv_结构体的别名
- 在C环境中,它是JNINativeInterface_结构体指针的别名
JNIEnv的指针会被JNI传入到本地方法的实现函数中来对Java端的代码进行操作。
- NewObject:创建Java类中的对象
- NewString:创建Java类中的String对象
- New<Type>Array:创建类型为Type的数组对象
- Get<Type>Field:获取类型为Type的字段
- Set<Type>Field:设置类型为Type的字段的值
- GetStatic<Type>Field:获取类型为Type的static的字段
- SetStatic<Type>Field:设置类型为Type的static的字段的值
- Call<Type>Method:调用返回类型为Type的方法
- CallStatic<Type>Method:调用返回值类型为Type的static方法
jobject/
jclass
为了能够在Native层访问Java中的类和对象,jobject
和jclass
分别指代了其所指代的类和对象,进而访问成员方法和成员变量等。
- 当java中定义的native方法为静态方法时,则第二个参数为jclass,jclass代表native方法所属类的class本身。
- 当java中定义的native方法为非静态方法时,则第二个参数为jclass,jobject代表native方法所属类的实例对象。
参考文献:
【1】JNI基础之JNIEnv,jclass和jobject