美文网首页
JNI基础-JNI方法

JNI基础-JNI方法

作者: 伊泽瑞额 | 来源:发表于2020-02-20 12:23 被阅读0次

这里讲到的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);
1、C调用java方法

相关文章

网友评论

      本文标题:JNI基础-JNI方法

      本文链接:https://www.haomeiwen.com/subject/fudcrctx.html