这里讲到的JNI方法是指JNIEnv方法指针所指向的结构体(JNINativeInterface)一些函数
方法操作
以调用java层的获取 uuid 方法为例子:
public static String getUUID() {
return UUID.randomUUID().toString();
}
1、C调用java方法
//1. 调用getuuid 的static 方法
/*jobject(JNICALL *CallStaticObjectMethod) (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
CallStaticObjectMethod() 需要NIEnv *env, jclass clazz, jmethodID methodID, ... 这些参数
*/
//2.获取_jmethodID
jmethodID j_md = (*env)->GetStaticMethodID(env,jclz,"getUUID","()Ljava/lang/String");
jstring j_uuid=(*env)->CallStaticObjectMethod(env, jclz, j_md);
// jstring 转成 c 的 string
char * c_uuid=(*env)->GetStringUTFChars(env,j_uuid,NULL);
1.1 jmethodID (GetStaticMethodID)(JNIEnv, jclass, const char, const char)
说明:获取方法ID
参数:JNIEnv:函数结构体指针,jclass:java层当前对象, char: 参数类型签名描述
返回:jmethodID:方法id
jmethodID j_md = (*env)->GetStaticMethodID(env,jclz,"getUUID","()Ljava/lang/String");
1.2 jobject (CallObjectMethod)(JNIEnv, jobject, jmethodID, ...);
说明:调用Object方法
参数:JNIEnv*:函数结构体指针,jobject:java层当前对象
返回:jclass:class对象
jstring j_uuid=(*env)->CallStaticObjectMethod(env, jclz, j_md);
网友评论