jni数据问题】的更多相关文章

原文:http://www.iteye.com/topic/295776 JNI一直以来都很少去关注,但却是我心中的一个结,最近这几天刚好手头有点时间,因此抽空看了一下这方面的东西,整理了一份文档,JNI技术的出现主要是基于三个方面的应用需求: 1. 解决性能问题Java具有平台无关性,这使人们在开发企业级应用的时候总是把它作为主要候选方案之一,但是性能方面的因素又大大削弱了它的竞争力.为此,提高Java的性能就显得十分重要.Sun公司及Java的支持者们为提高Java的运行速度已经做出了许多努…
目的: jni中(c++函数)一个 char buf[4] 如何通过env->CallVoidMethod(clazz,method_OnFindCards,jStringParam); 在app上显示出来 比如: //获得Java层的回调函数 jclass mClazz = env->FindClass("com/android/server/RfidReaderService"); LOGI("the mClazz is obtained from the j…
前言 或许你知道了jni的简单调用,其实不算什么百度谷歌一大把,虽然这些jni绝大多数情况下都不会让我们安卓工程师来弄,毕竟还是有点难,但是我们还是得打破砂锅知道为什么这样干吧,至少也让我们知道调用流程和数据类型以及处理方法,或许你会有不一样的发现. 今天也给出一个JNI动态注册native方法的例子,如图:  JNI实现步骤 JNI 开发流程主要分为以下步骤: 编写声明了 native 方法的 Java 类 将 Java 源代码编译成 class 字节码文件 用 javah -jni 命令生成…
一.数据类型映射概述 从我们开始jni编程起,就不可能避开函数的参数与返回值的问题.java语言的数据类型和c/c++有很多不同的地方,所以我们必须考虑当在java层调用c/c++函数时,怎么正确的把java的参数传给c/c++函数,怎么正确的从c/c++函数获取正确的函数返回值:反之,当我们在c/c++中使用java的方法或属性时,如何确保数据类型能正确的在java和c/c++之间转换. 回顾我们上一篇文章中的那个c函数: #include <stdio.h> #include <jn…
工作中遇到了ndk编程,其实核心就是java和本地的数据交互.现把所有数据类型的传递写成demo. 1,ini数组传递  我们实现传递8个数值过去,然后本地将八个数值放到数组,返回. java代码: public native int[] getMessage(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8); //传递8个int类型的数值到本地方法 本地代码: JNIEXPORT jintArray Java_com_exampl…
一. 把java中的string 转化成 c中的char数组 /** *Jstring2CStr 把java中的string 转化成 c中的char数组. *jstring jstr 要被转化的java string *char* 代表的是字符串数组名称(字符串数组的首地址) */ char* Jstring2CStr(JNIEnv* env, jstring jstr) { char* rtn = NULL; jclass clsstring = (*env)->FindClass(env,&qu…
Java Native Interface(JNI)从零开始详细教程  ==================================================================================== 首先声明:文章非原创,看了很多关于JNI的介绍,只有这篇个人认为最好,并且附加本人探究过程中的一些见解. 文章来源:[原文]:https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInt…
1.创建DirectByteBuffer Direct ByteBuffer是通过JNI在Java虚拟机外的内存中分配了一块(所以即使在运行时通过-Xmx指定了Java虚拟机的最大堆内存,还是可能实例化超出该大小的Direct ByteBuffer),该内存块并不直接由Java虚拟机负责垃圾收集. 使用allocateDirect()静态方法创建对象分配内存 ByteBuffer buffer=ByteBuffer.allocateDirect(256); 1 /** 2 * Allocates…
介绍Java如何将数据传递给C和C回调Java的方法.  java传递数据给C,在C代码中进行处理数据,处理完数据后返回给java.C的回调是Java传递数据给C,C需要用到Java中的某个方法,就需要调用java的方法. Android中使用JNI七个步骤: 1.创建一个android工程 2.JAVA代码中写声明native 方法 public native String helloFromJNI(); 3.用javah工具生成头文件 4. 创建jni目录,引入头文件,根据头文件实现c代码…
最近做的Android项目需要调用C代码,进行串口通信及与硬件设备通信,因此要用到JNI,其中本地代码需要向Java层返回三个参数,分别为 参数一:int型: 参数二: 通信指令,本地代码中为unsigned char[]型,返回unsigned char[].int[]都可以,能直接将数据转换为16进制字符串最好(Android界面上要显示的就是数组每一位的16进制值): 参数三:同参数二. 具体的实现方式有两种. 第一种是C代码获取Java属性参数,本地修改参数值. 第二种是将三个参数定义为…