Android JNI 通過C/C++呼叫JAVA方法
阿新 • • 發佈:2019-01-02
#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 }
#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 fieldID_num = env->GetFieldID(native_clazz,"number","I");
//得到jmethodID jmethodID methodID_func=env->GetMethodID(native_clazz,"signTest","(ILjava/util/Date;[I)I");
//
//得到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 }