美文网首页
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