JNI学习-- C调用java方法

 步骤:

1.通过类名获取jclass对象

2.通过jclass对象拿到jmethodId

3.通过JNIEnv*对象调用jmethodId对象

  
  
  
  
  1. JNIEXPORT void JNICALL Java_com_vincent_jni_callback_JNI_1dataprovider_sayHello 
  2.   (JNIEnv *env, jobject obj, jstring str){ 
  3.  
  4.     //1.通过反射拿到 class 
  5.     //     jmethodID   (*GetMethodID)(JNIEnv*, jclass, const char*, const char*); 
  6.  
  7.     //env :jni指针对象  ,"com/vincent/jni/callback/JNI_dataprovider" 类全名 
  8.     jclass clazz =(*env)->FindClass(env,"com/vincent/jni/callback/JNI_dataprovider"); 
  9.  
  10.     if(clazz==0){ 
  11.  
  12.         LOGI("find class error"); 
  13.  
  14. return; 
  15.     } 
  16.     //2.拿到相应方法的methodID 
  17.     //    jmethodID GetMethodID(jclass clazz, const char* name, const char* sig) 
  18.  
  19.         LOGI("find class success"); 
  20.  
  21.         // env,clazz(java对象),方法名,方法签名(javap获取) 
  22. jmethodID methoID = (*env)->GetMethodID(env,clazz,"javaSayHello","(Ljava/lang/String;)V"); 
  23. //3.调用方法 
  24. //    void        (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...); 
  25.  
  26. (*env)->CallVoidMethod(env,obj,methoID,str); 
  27.  
  28.  
  29. JNIEXPORT jint JNICALL Java_com_vincent_jni_callback_JNI_1dataprovider_subXAndY( 
  30.     JNIEnv * env, jobject obj, jint x, jint y) { 
  31.  
  32. //1.通过反射拿到 class 
  33. //    jclass      (*FindClass)(JNIEnv*, const char*); 
  34.  
  35. jclass clazz2 = (*env)->FindClass(env, 
  36.         "com/vincent/jni/callback/JNI_dataprovider"); 
  37.  
  38. if (clazz2 == 0) { 
  39.  
  40.     LOGI("find class error"); 
  41.  
  42.     return 0; 
  43. //2.拿到相应方法的methodID 
  44. //       jmethodID   (*GetMethodID)(JNIEnv*, jclass, const char*, const char*); 
  45.  
  46. LOGI("find class success"); 
  47.  
  48. jmethodID methoID2 = (*env)->GetMethodID(env, clazz2, "javaSubXAndY", "(II)I"); 
  49. //3.调用方法 
  50. //   jint        (*CallIntMethod)(JNIEnv*, jobject, jmethodID, ...);; 
  51.  
  52. return (*env)->CallIntMethod(env, obj, methoID2, x, y); 
  53.  

 

你可能感兴趣的:(java,c,jni,jniC调用java)