android jni 返回java类
今天,简单讲讲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类就讲完了。
就这么简单。
android jni 返回java类相关推荐
- Android JNI(Java Native Interface)技术介绍
Android平台上的JNI技术介绍 JUL 15TH, 2013 | COMMENTS NDK简介 Android是由Google领导开发的操作系统,Android依靠其开放性,迅速普及,成为目前最 ...
- android jni 调用java对象_Android NDK开发之Jni调用Java对象
本地代码中使用Java对象 通过使用合适的JNI函数,你可以创建Java对象,get.set 静态(static)和 实例(instance)的域,调用静态(static)和实例(instance)函 ...
- Android JNI实现Java与C/C++互相调用,以及so库的生成和调用(JNI方式调用美图秀秀so)
前言 关于Android Studio如何继承JNI开发环境,请阅读上一篇博文 Android CMake集成JNI开发环境本篇博文将结合实例分别讲解Android中Java如何调用C/C++的方法, ...
- jni调用java类_JNI之C++调用Java类 —— java.lang.String
JNI之C++调用Java类 -- java.lang.String 为什么要用C++调用Java类?很难回答,写着文章只是觉得JNI很有意思.于是开始编写一段使用VC++在Windows系统里调用j ...
- android jni与java之间数据传输时怎么转换
1.c中的jstring数据类型就是java传入的String对象,经过jni函数的转化就能成为c的char*. Java 类型 本地c类型 说明 boolean jboolean 无符号 8 位 b ...
- Android热修复Java类_Android 热修复(一)
名词: dex:java文件编译class 然后生成 dex文件在Android上运行: 1.dex分包: 2.找出出现问题的dex文件进行替换操作 3.下载dex文件,静默替换有问题的dex文件,进 ...
- Android Jni反射Java方法,弹出对话框
1.创建页面 /*** @描述 C语言调用java反射方法* @项目名称 App_imooc* @包名 com.android.imooc.jni* @类名 ReflectActivity* @aut ...
- android jni返回bitmap,JNI 层 Bitmap 转 OpenCV Mat
JNI 层 Bitmap 转 OpenCV Mat Java 提供的图片类型大多是 Bitmap 类型(ARGB_8888 或 RGB_565) 那么如果需要使用 OpenCV 进行处理,需要对 Bi ...
- android context.java_Android / Java类范围和Context
我有一个简单的按钮类,当按钮被点击时,我希望另一个类被安装并调用所有的方法.按钮类: public class ButtonActivity extends Activity { Button myB ...
最新文章
- 如果编程语言是飞机 | 每日趣闻
- 【模板】割点(割顶)
- 一个简单案例教你如何用Typescript写Vuex
- python如何进行大到小排序_Python3基础 list sort 从小(大)到大(小)排序
- 分析酸对酸性染料染羊毛染色性能的影响?举例说明酸性染料染羊毛时,如何选择合适的染浴pH值?并说明原因。
- SharePoint 2013 Farm 安装指南——Least Privilege
- 【Java】StringBuilder类、包装类
- js 通用 1000 金额 三位格式化 1,000
- Origin绘制热力图
- 计算机的概念重点,2019考研计算机重点知识:十二大基础概念释义
- 点云数据集汇总整理(匠心之作,附官方下载地址)
- 基于树莓派的人脸识别(Linux系统 百度智能云平台)
- SIR传染病模型及matlab代码
- 485通讯测试软件,485串口测试 RS485口测试方法
- 2014 usnews 计算机科学 排名 天道留学,2014年美国USNews大学公立大学排名情况
- C语言控制鼠标自动画图
- 仙道服务器维护,【正式服】2月14日例行更新维护公告
- 班级logo设计分析
- 关于自己配置电脑的一点心得
- Gartner丨 边缘计算成熟度曲线 2019
热门文章
- continue和pass測试
- Linux操作系统-命令-free
- 关于调试windows services的方法
- 解密QQ非会员漫游聊天记录
- dealloc 的水,很深?
- java 关键字volatile的作用
- 软件工程——结对编程第一次作业
- 主体的实践,摘录-----保守还是改革,不是靠思辨的力量,而是靠实践
- effective c++ 条款20:宁以pass-by-reference-to-const替换pass-by-value
- [BZOJ1643][Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪