创建实体类
这个实体类将通过Native方法创建并返回。
public class Student {
private String name ;
private int age
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
声明Native方法
public native Student getStudent(String name,int age);
C代码中实现Native方法
Java方法签名的获取方式请查看Android NDK开发:Native层利用反射调用Java层方法
JNIEXPORT jobject JNICALL Java_com_itfitness_ndkdemo01_MainActivity_getStudent
(JNIEnv* env, jobject jobj, jstring name, jint age) {
//1.找到类
jclass clazz = (*env)->FindClass(env,"com/itfitness/ndkdemo01/Student");//最后一个参数是实体类的全路径
//2.找方法
jmethodID setName = (*env)->GetMethodID(env,clazz,"setName","(Ljava/lang/String;)V");//最后一个参数是方法的签名
jmethodID setAge= (*env)->GetMethodID(env, clazz, "setAge", "(I)V");
//3.获取对象
jobject studentObj = (*env)->AllocObject(env,clazz);
//4.执行对象方法
(*env)->CallVoidMethod(env,studentObj,setName,name);
(*env)->CallVoidMethod(env, studentObj, setAge, age);
return studentObj;
}
Java代码中进行调用
这里通过按钮进行调用。
mBt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Student student = getStudent("李四", 23);
Toast.makeText(MainActivity.this, student.getName() + "====="+student.getAge(), Toast.LENGTH_SHORT).show();
}
});
调用结果
![](https://img.haomeiwen.com/i8850933/53c1cf7f826bc105.png)
网友评论