En profundidad Android JNI objeto

Android JNI Primeros pasos se implementa en objeto C ++ Estudiante en el funcionamiento de Java, y luego mirar un ejemplo de objetos.

Aquí Insertar imagen Descripción

Aquí Insertar imagen Descripción

Aquí Insertar imagen Descripción

El código anterior, no tenemos ninguna persona entrante y objeto Student, pero conseguir los dos objetos por la reflexión del camino.

de registro de salida de la siguiente manera:
Aquí Insertar imagen Descripción
código completo testObject sigue:

extern "C"
JNIEXPORT void JNICALL
Java_com_hongx_jni_MainActivity_testObject(JNIEnv *env, jobject thiz) {
    const char *person_class_str = "com/hongx/jni/Person";
    jclass person_class = env->FindClass(person_class_str);
    jobject person = env->AllocObject(person_class);
    // 初始化方法
    const char *sig = "(Lcom/hongx/jni/Student;)V";
    jmethodID setStudent = env->GetMethodID(person_class, "setStudent", sig);
    // 直接创建 Student 对象
    const char *student_class_str = "com/hongx/jni/Student";
    jclass student_class = env->FindClass(student_class_str);
    jobject student = env->AllocObject(student_class);
    // 给我们创建出来的Student对象赋值
    sig = "(Ljava/lang/String;)V";
    jmethodID setName = env->GetMethodID(student_class, "setName", sig);
    jstring value = env->NewStringUTF("刘德华");
    env->CallVoidMethod(student, setName, value);
    sig = "(I)V";
    jmethodID setAge = env->GetMethodID(student_class, "setAge", sig);
    env->CallVoidMethod(student, setAge, 89);
    // 调用Person里面的方法
    env->CallVoidMethod(person, setStudent, student);
    // 回收方式
    /*env->DeleteLocalRef(student_class); // jclass  jobject
    env->DeleteLocalRef(student);*/
}
Publicados 446 artículos originales · ganado elogios 67 · vistas 240 000 +

Supongo que te gusta

Origin blog.csdn.net/hongxue8888/article/details/105117500
Recomendado
Clasificación