您好,登錄后才能下訂單哦!
本案例中編寫 android app中對應(yīng)的jni函數(shù)
static native Student getStudent();
jni中獲取自定義的類函數(shù)描述定向總結(jié)
定義一個char *指向自定義類
1、返回類型:jobject
2、獲取自定義的類
3、通過自定義類的構(gòu)造函數(shù)在jni中構(gòu)建jobject類:獲取方法的域id的描述符填寫"<init>"
4、jni回調(diào)app中的特定方法來設(shè)置自定義對象
或者不使用回調(diào)來設(shè)置對象屬性;set***Field
5、最后返回jobject對象
完整代碼
const char * jnistudentname = "com/jniacpp/Student"; jobject getStudent(JNIEnv *env, jobject thiz){ jclass stuClass = env->FindClass(jnistudentname); //取得構(gòu)造方法的域id jmethodID constuctId = env->GetMethodID(stuClass, "<init>", "()V"); // 構(gòu)建obj對象 jobject stuObj = env->NewObject(stuClass, constuctId); //取得特定方法的域id jmethodID setStudentId = env->GetMethodID(stuClass, "setStudent", "(ILjava/lang/String;Z)V"); //調(diào)用app中的setStuudent函數(shù) env->CallVoidMethod(stuObj, setStudentId, "110917010", "mrzhang", true); /* //取得各個屬性的域id; jfieldID nameID = env->GetFieldID(stuClass, "name", "Ljava/lang/String;"); jfieldID idID = env->GetFieldID(stuClass, "id", "I"); jfieldID isBoyID = env->GetFieldID(stuClass, "isBoy", "Z"); env->SetIntField(stuObj, nameID, 21); env->SetObjectField(stuObj, nameID, env->NewStringUTF("zhang sir")); env->SetIntField(stuObj, isBoyID, true); */ return stuObj; }
參考電子書
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。