1. 程式人生 > >Android JNI 通過C/C++呼叫JAVA方法

Android JNI 通過C/C++呼叫JAVA方法

#include "video1_TestNative.h"  
#include <iostream>  
using namespace std;  
JNIEXPORT void JNICALL Java_video1_TestNative_sayHello(JNIEnv * env, jobject obj){  
    cout<<"Hello Native Test !"<<endl;  
    //因為test不是靜態函式,所以傳進來的就是呼叫這個函式的物件  
    
//否則就傳入一個jclass物件表示native()方法所在的類      jclass native_clazz = env->GetObjectClass(obj);  
  
    //
得到jfieldID      jfieldID fieldID_prop = env->GetFieldID(native_clazz,"name","Ljava/lang/String;");  
    jfieldID fieldID_num = env->GetFieldID(native_clazz,"number","I");  
  
    //得到jmethodID      jmethodID methodID_func=env->GetMethodID(native_clazz,"signTest","(ILjava/util/Date;[I)I");  
    //
呼叫signTest方法      env->CallIntMethod(obj,methodID_func,1L,NULL,NULL);  
  
    //得到name屬性      jobject name = env->GetObjectField(obj,fieldID_name);  
    //得到number屬性      jint number= env->GetIntField(obj,fieldID_num);   
  
    cout<<number<<endl;//100  
    
//修改number屬性的值      env->SetIntField(obj,fieldID_num,18880L
);    
    number= env->GetIntField(obj,fieldID_num);    
    cout<<number<<endl;//18880   }