android jni 返回java类

来源:互联网 发布:公司网络规划思路 编辑:程序博客网 时间:2024/06/06 13:08


今天,简单讲讲android 在jni中如何返回一个java的类。


之前,我写了一些关于jni的博客,里面返回的都是简单的int类型,那么如果我需要返回很多int和String类型,那么怎么办呢?当然是在java里写一个类,把需要返回的变量封装成类之间返回。我在网上搜索了资料,终于解决了这个问题。这里记录一下。

在Native层返回一个复杂对象(即一个类咯)

使用的类非常简单,如下:


Student.java

package com.feixun.jni;public class Student{    private int age ;    private String name ;    //构造函数,什么都不做    public Student(){ }        public Student(int age ,String name){        this.age = age ;        this.name = name ;    }        public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name){        this.name = name;    }        public String toString(){        return "name --- >" + name + "  age --->" + age ;    }}



  Java层的方法对应为:

public class HelloJni {...//在Native层返回一个Student对象public native Student nativeGetStudentInfo() ;...}


 Native层该方法实现为 :       

/* * Class:     com_feixun_jni_HelloJni * Method:    nativeGetStudentInfo * Signature: ()Lcom/feixun/jni/Student; *///返回一个复杂对象JNIEXPORT jobject JNICALL Java_com_feixun_jni_HelloJni_nativeGetStudentInfo  (JNIEnv * env, jobject obl){//关于包描述符,这儿可以是 com/feixun/jni/Student 或者是 Lcom/feixun/jni/Student; //   这两种类型 都可以获得class引用jclass stucls = env->FindClass("com/feixun/jni/Student"); //或得Student类引用//获得得该类型的构造函数  函数名为 <init> 返回类型必须为 void 即 VjmethodID constrocMID = env->GetMethodID(stucls,"<init>","(ILjava/lang/String;)V");jstring str = env->NewStringUTF(" come from Native ");    jobject stu_ojb = env->NewObject(stucls,constrocMID,11,str);  //构造一个对象,调用该类的构造函数,并且传递参数    return stu_ojb ;}


这里简单讲讲,在jni里主要是通过env->FindClass("com/feixun/jni/Student")找到类id,里面的参数就是类的路径。然后通过类id找到了类的构造函数id,这里env->GetMethodID(stucls,"<init>","(ILjava/lang/String;)V");  的参数第一个是类id, <init>是初始化函数的名称,(ILjava/lang/String;)V对应的是构造函数的参数和返回值,之歌需要了解jni和java变量的对应规则,大家可以自己去网上查找资料。


android jni 返回java类就讲完了。


就这么简单。


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 全预混低氮锅炉 尿氮素低是怎么回事 燃气锅炉低氮燃烧技术 低氮锅炉厂家 锅炉低氮燃烧改造 低氮天然气锅炉 重庆低氮锅炉 燃气低氮蒸汽锅炉 河南低氮锅炉 燃气低氮锅炉价格 全氮 氮及其化合物 渗氮 总氮 制氮 含氮化合物 低沉反义词 低沉 低沉近义词 低沉的意思 低沉咆哮 低沉拼音 低沉的拼音 低沉的天空 低沉的反义词 低沉的近义词 低沉反义词是啥 猫发出低沉的震动声 低沉的反义词是什么 声音低沉的男生适合唱什么歌 猫发出低沉的呜呜声 猫为什么发出低沉呼噜呼噜声 超级都市仙王 低沉的凹凸 感恩父母歌曲催泪低沉 低泡润湿分散剂 超能植翠低泡洗衣液 低泡地毯清洁剂 超能低泡洗衣液 肿眼泡割双眼皮的价格低 低泡葡萄酒