溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

[android底層]jni中獲取自定義的類函數(shù)編寫

發(fā)布時間:2020-07-15 11:31:24 來源:網(wǎng)絡(luò) 閱讀:1923 作者:lilin9105 欄目:移動開發(fā)

本案例中編寫 android app中對應(yīng)的jni函數(shù)

static native Student getStudent();



jni中獲取自定義的類函數(shù)描述定向總結(jié)



    定義一個char *指向自定義類

[android底層]jni中獲取自定義的類函數(shù)編寫

1、返回類型:jobject

[android底層]jni中獲取自定義的類函數(shù)編寫

2、獲取自定義的類

[android底層]jni中獲取自定義的類函數(shù)編寫

3、通過自定義類的構(gòu)造函數(shù)在jni中構(gòu)建jobject類:獲取方法的域id的描述符填寫"<init>"

[android底層]jni中獲取自定義的類函數(shù)編寫

4、jni回調(diào)app中的特定方法來設(shè)置自定義對象

[android底層]jni中獲取自定義的類函數(shù)編寫

        或者不使用回調(diào)來設(shè)置對象屬性;set***Field

[android底層]jni中獲取自定義的類函數(shù)編寫

5、最后返回jobject對象

[android底層]jni中獲取自定義的類函數(shù)編寫



    完整代碼

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;
}


參考電子書

Android技術(shù)之JNI和HAL.pdf


向AI問一下細(xì)節(jié)

免責(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)容。

AI