美文网首页Android-NDK/JNI
Android NDK开发:Native层实例化Java对象

Android NDK开发:Native层实例化Java对象

作者: itfitness | 来源:发表于2019-07-23 08:27 被阅读8次

创建实体类

这个实体类将通过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();
            }
        });

调用结果

相关文章

网友评论

    本文标题:Android NDK开发:Native层实例化Java对象

    本文链接:https://www.haomeiwen.com/subject/ctunlctx.html