JAVA JNI学习
JAVA JNI
JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。
设计目的
标准的java类库可能不支持你的程序所需的特性。 JNI
或许你已经有了一个用其他语言写成的库或程序,而你希望在java程序中使用它。
你可能需要用底层语言实现一个小型的时间敏感代码,比如汇编,然后在你的java程序中调用这些功能
JNI步骤:
1、 编写JAVA程序
Public class JniTest{
native int add(int a , int b);
//所有
native
关键词修饰的都是对本地的声明
Static {
System.loadLibrary(“add”);
//
加载动态库
(libadd.so)
}
public static void main(String [] args){
System.out.println(“start java app”);
JniTest jniTest = new JniTest();
int ret;
ret = jniTest.add(4,6);
System.out.println(“jni test result is: ” + ret);
}
}
2、 编译JAVA程序
javac JniTest.java
javah -jni JniTest会生成JniTest.h如下
把JniTest.h改成add.c(mv JniTest.h add.c)并把文件必修如下
2.1JNI函数命名规则
Java(固定)_<包名,如com_android_xxx>_<类名>_<函数名>
Java_JniTest_add
固定 类名 函数名 (例中没有对JAVA进行打包)
3、 编译动态库
gcc –fPIC –c add.c –o add.o
在编译过程中会出现jni.h等文件找不到,所以用绝对路径指定头文件:在add.c修改如下
在jni.h修改如下
gcc –shared add.o –o libadd.so
//生成libadd.so动态库
4、 执行JAVA程序
LD_LIBRAY_PATH=. java JniTest
//为程序增加从当前目录加载动态库
执行结果:
start java app
jni test result is: 10
总结:在过程中注意所包含的头文件是哪里的,jni.h是java(编译器)提供的,所以在<JAVA_HOME>/include/;通常我们写的linux程序的头文件是在/usr/include/下(gcc提供)
OK,完毕!!!!!!!!!!!!
JAVA JNI学习的更多相关文章
- Android JNI学习(三)——Java与Native相互调用
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
- 一、Android NDK编程预备之Java jni简介
转自: http://www.eoeandroid.com/thread-264384-1-1.html 游戏开发 视频教程 博客 淘帖 论坛›eoe·Android应用开发区›Androi ...
- 【转】JNI学习积累之一 ---- 常用函数大全
原文网址:http://blog.csdn.net/qinjuning/article/details/7595104 本文原创,转载请注明出处:http://blog.csdn.net/qinjun ...
- Android(java)学习笔记160:Framework运行环境之 Android进程产生过程
1.前面Android(java)学习笔记159提到Dalvik虚拟机启动初始化过程,就下来就是启动zygote进程: zygote进程是所有APK应用进程的父进程:每当执行一个Android应用程序 ...
- JNI学习总结
JNI学习总结 标签(空格分隔): java JNI:Java Native Interface,是一种通过java调用本地方法的技术(当然也可以反过来),随着JDK版本的提升,JNI的效率也一直在提 ...
- java虚拟机学习-JVM内存管理:深入垃圾收集器与内存分配策略(4)
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 概述: 说起垃圾收集(Garbage Collection,下文简称GC),大部分人都把这项 ...
- Android JNI学习(五)——Demo演示
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
- Android JNI学习(四)——JNI的常用方法的中文API
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
- Android JNI学习(二)——实战JNI之“hello world”
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
随机推荐
- IOS开发笔记(4)数据离线缓存与读取
IOS开发笔记(4)数据离线缓存与读取 分类: IOS学习2012-12-06 16:30 7082人阅读 评论(0) 收藏 举报 iosiOSIOS 方法一:一般将服务器第一次返回的数据保存在沙盒里 ...
- 如何向投资人展示——How to Present to Investors
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:茶叶末链接:http://www.zhihu.com/question/23638879/answer/34525204来源: ...
- .Net XML操作 <第二篇>
一.XML文件操作中与.Net中对应的类 微软的.NET框架在System.xml命名空间提供了一系列的类用于Dom的实现. 以下给出XML文档的组成部分对应.NET中的类: XML文档组成部分 对应 ...
- boost库使用:仿SGI-STL实现的一个树节点allocator
////////////////////////////////////////////////////////////////////////// //code by hzs //email: hu ...
- Apache RewriteRule QSA 什么意思
看到下面这段代码: RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^(.+)$ index.php?url=$1 [QSA,L] The Rewrit ...
- c++ 14
一.堆栈(stack) stack -> vector/deque/list push -> push_back pop -> pop_back top -> bac ...
- B/S 网站技术选型
Windows平台: http://www.asp.net, http://www.asp.net/mvc Web技术 http://msdn.microsoft.com/ef 数据访问中间件 htt ...
- JS 实现 startWith endWith函数
String.prototype.startWith = function(s) { if (s == null || s == "" || this.length == 0 || ...
- poj 1759 Garland (二分搜索之其他)
Description The New Year garland consists of N lamps attached to a common wire that hangs down on th ...
- SQL Server,Oracle,DB2索引建立语句的对比
原文引至:http://jvortex.blog.163.com/blog/static/16961890020122141010878/ 我们知道,索引是用于加速数据库查询的数据库对象.原理就是减少 ...