本案例中编写 android app中对应的jni函数
1
|
static
native
Student getStudent();
|
jni中获取自定义的类函数描述定向总结
定义一个char *指向自定义类
1、返回类型:jobject
2、获取自定义的类
3、通过自定义类的构造函数在jni中构建jobject类:获取方法的域id的描述符填写"<init>"
4、jni回调app中的特定方法来设置自定义对象
或者不使用回调来设置对象属性;set***Field
5、最后返回jobject对象
完整代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
const
char
* jnistudentname =
"com/jniacpp/Student"
;
jobject getStudent(JNIEnv *env, jobject thiz){
jclass stuClass = env->FindClass(jnistudentname);
//取得构造方法的域id
jmethodID constuctId = env->GetMethodID(stuClass,
"<init>"
,
"()V"
);
// 构建obj对象
jobject stuObj = env->NewObject(stuClass, constuctId);
//取得特定方法的域id
jmethodID setStudentId = env->GetMethodID(stuClass,
"setStudent"
,
"(ILjava/lang/String;Z)V"
);
//调用app中的setStuudent函数
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;
}
|
本文转自lilin9105 51CTO博客,原文链接:http://blog.51cto.com/7071976/1422746,如需转载请自行联系原作者