案例二:传递参数给C代码,并从其获取结果 注:这里传递的参数是基本类型的参数,在C代码中有直接的映射类型. 此案例所有生成的所有文件如下: (1)编写案例二的Java代码,如下: 这里我们定义了一个native方法,此方法用于计算两数平均值.将两个Java int类型的值传递给C代码,使其计算并返回double值.然后输出到标准IO流 注:这里加载动态链接库的方式,改为了loadLibrary,只需提供库名即可,但是接下来在运行的时候,需要指定java.library.path,使其指向库所在的…
案例四:回调实例方法与静态方法 描述:此案例将通过Java调用的C语言代码回调Java方法. 要想调用实例对象的方法,需要进行以下步骤: 1. 通过对象实例,获取到对象类的引用  => GetObjectClass() 2. 通过类引用,获取到方法ID  => GetMethodID() 需要提供方法名,和方法签名.也就是需要这两个信息来标识确定一个方法. 方法签名格式:(参数列表)返回值类型. 例如: ()V或(Ljava/lang/String;)V等等.这里的所说的类型表示与案例三相同…
案例三:C代码访问Java对象的实例变量   获取对象的实例变量的步骤: 1. 通过GetObjectClass()方法获得此对象的类引用 2. 通过类引用的GetFieldID()方法获得实例变量的Field ID. 你需要提供 变量名,字段类型描述符 对于Java 类, 字段描述符格式为 "L<类全称>;" 类全称中,点"."用 "/"代替.例如,String 的描述符为"Ljava/lang/String;"…
本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 JNI支持将类实例和数组类型(如jobject,jclass,jstring,jarray)作为不透明的引用.本地代码不直接检查不透明指针的内容,而是通过使用JNI方法来得到一个指向数据结构的指针的不透明引用.也就是说JNI操作的内容都是引用,因此我们只需要知道在JNI中有哪些引用.JNI支持三种不透明的引用:本地引用.全局引用,弱全局引用. 本地引用…
首先记录一个问题,关于如何用javah生成头文件. 为什么要生成头文件?在含有 static{ System.loadLibrary("hellojni"); } 这样代码的类下面定义方法,比如 static public native String PrintHello(); 那么再用javah生成头文件,h文件就会更新,含有这个方法的定义. 如何生成h文件? windows下:javah -classpath bin/classes -d jni com.ggndktest1.Jn…
参看: http://blog.csdn.net/xw13106209/article/details/6989415…
一.JNI(Java Native Interface)        1.什么是JNI:               JNI(Java Native Interface):java本地开发接口               JNI是一个协议,这个协议用来沟通java代码和外部的本地代码(c/c++)               外部的c/c++代码也可以调用java代码        2.为什么使用JNI:               效率上 C/C++是本地语言,比java更高效      …
JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? 首先,Java语言提供的类库无法满足要求,且在数学运算,实时渲染的游戏上,音视频处理等方面上与C/C++相比效率稍低. 然后,Java语言无法直接操作硬件,C/C++代码不仅能操作硬件而且还能发挥硬件最佳性能. 接着,使用Java调用本地的C/C++代码所写的库,省去了重复开发的麻烦,并且可以利用很多开源的库提高程序效率.…
前言: 一提到JNI,多数编程者会下意识地感受到一种无法言喻的恐惧.它给人的第一感觉就是"难",因为它不是单纯地在JVM环境内操作Java代码,而是跳出虚拟机与其他编程语言进行交互. 你可能至今还没听说过这个技术,但是如果你是一个源码爱好者,或者有翻阅过JDK的一些源码,那你一定有接触过native方法.你是否因为查阅源码直到native方法戛然而止,但又由于它的空方法体,而对底层原理不知所以? 本文就带让你了解JNI.并通过一些案例来自己实现JNI的交互. 什么是JNI? JNI 全…
生活 这一个礼拜过得真的是苦不堪言,上周因为打球脚踝直接扭伤,肿的想猪蹄一样,然后休息几天消肿了,可以缓慢龟速的行走了,然而五一回来上班第一天,上班鞋子还能穿上,下班脚已插不进鞋子里面了,好吧,又肿回来了,苦逼. 正文 回到正文,上篇我们已学习到了Android NDK开发之从环境搭建到Demo级十步流,主题是DNK环境搭建和Demo示例开发步骤,而今天我们要学习的是通过JNI实现Java和C之间的交互. 对于JNI的理解,上一节也已讲过,这里在回顾下: JNI:Java Native Inte…