jni的使用方法
我们可以通过jni来调用c/c++程序,C/C++一般会被作为动态库的形式来供java程序调用
环境
操作系统:Centos6.7
java: openjdk7
依赖包:java7-devel(yum install -y java7-devel)
java程序
在hava程序中会调用本地方法,而这个本地方法使用C语言实现的。
public class HelloWorld{
static {
System.loadLibrary("Hello");
}
public native void DisplayHello();
public static void main(String[] args){
new HelloWorld().DisplayHello();
}
}
编译java程序:javac HelloWorld.java
生成相应的头文件:javah -jni HelloWorld
下面是生成的HelloWorld.h的内容,其中的白色部分就是需要在C代码中实现的函数。

C程序
#include<jni.h>
#include"HelloWorld.h"
#include<stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_DisplayHello(JNIEnv *env, jobject obj){
printf("Hello world\n");
return;
}
在C程序中,我们需要包含jni.h以及刚才生成的HelloWorld.h。如果从C的角度来看,一般一个.h文件会对应一个.c文件。而.h文件中一般是函数的声明,而.c文件是具体函数的实现。HelloWorld.h中有函数的声明,而C程序中就应该有函数的实现。
这样,但是通过javah生成.h文件时,剩下的工作就是C方面的编程问题了。
将C程序生成动态库:
在生成动态库的时候需要制定头文件(jni.h)的位置,安装java依赖库的时候会将其安装到/usr/local下,所以需要用-I选项来明确指出

执行
在执行的时候需要指定C库的位置

参考博文:
http://blog.csdn.net/banketree/article/details/40535325
http://www.cnblogs.com/mandroid/archive/2011/06/15/2081093.html
jni的使用方法的更多相关文章
- HAL中通过JNI调用java方法【转】
转载请注明本文出处:http://www.cnblogs.com/xl19862005 作者:Xandy 由于工作的需要,最近一直在研究HAL.JNI.Java方法之间互调的问题,并做了如下一些记录和 ...
- 【转】Android中JNI的使用方法
Android中JNI的使用方法 首先看一下Android平台的框架图:(网上盗用) 可以看到Android上层的Application和ApplicationFramework都是使用Java编写, ...
- 一键生成JNI头文件方法二
经常使用java的同学一定都接触过JNI(Java Native Interface)吧.JNI为我们提供了java<---->C/C++之间的接口,使得我们可以在java中调用C程序,以 ...
- android开发源代码分析--多个activity调用多个jni库的方法
android开发源代码分析--多个activity调用多个jni库的方法 有时候,我们在开发android项目时会遇到须要调用多个native c/jni库文件,下面是本人以前实现过的方法,假设有知 ...
- java native interface JNI 调用Java方法
在上一篇文章中介绍了JNI.以及java调用JNI.这篇讲一下 JNI调用java方法. 通过使用合适的JNI函数,你能够创建Java对象,get.set 静态(static)和 实例(instanc ...
- Android中JNI的使用方法(转载)
Android中JNI的使用方法 首先看一下Android平台的框架图:(网上盗用) 可以看到Android上层的Application和ApplicationFramework都是使用Java编写, ...
- android JNI 调用NDK方法
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- 关于JNI的使用方法
1首先在java里面定义你需要的native方法 2打开cmd,进入doc窗口,如果是android项目就进入到你当前项目的bin目录下,在doc里面输入cd E:\workspace\Test1 也 ...
- Android Studio中JNI -- 1 -- 配置方法
1.配置NDK 1.1 下载NDK Android Studio 1.2 配 android-ndk-r10e,不同版本的Studio需要配置不同的ndk,下载完成后,随便解压放至某个文件目录下 1. ...
随机推荐
- oracle存储过程--导出数据库表的说明文档
Oracle查询表的名字和comments select a.table_name,b.comments from user_tables a,ALL_TAB_COMMENTS b where a.t ...
- 烂泥:【解决】NFS服务器使用showmount –e命令报错
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 今天在NFS服务器使用showmount –e查看NFS共享目录时,发现系统一直显示如下错误: clnt_create: RPC: Port mappe ...
- Linux文件和目录
access() //检查是否调用进程有Access这个文件的权限,如果文件是一个符号链接,会将它解引用,成功返回0,失败返回-1设errno #include <unistd.h> in ...
- day 2 系统分区 扩展.md
1.分区类型 主分区: 最多只能有四个. 扩展分区: 最多只能有一个. 主分区加扩展分区最多有4个. 不能写入数据,只能包含逻辑分区. 逻辑分区 2.格式化 格式化(高级格式化)又称逻辑格式化,它是指 ...
- Android应用程序“.R文件”消失怎么办
其实Android自己维护这一个 public final class R类主要是跟新资源文件,这个R.java无需我们自己去修改,如果你不了解千万不要去修改它,它定义的每个资源值都是唯一的,不会和系 ...
- java汉化
http://download.eclipse.org/technology/babel/babel_language_packs/R0.13.0/luna/luna.php _x86_64版本下载地 ...
- 一:c语言(数据类型和运算符)
#include <stdio.h> /*就是一条预处理命令,它的作用是通知C语言编译系统在对C程序进行正式编译之前需做一些预处理工作.*/ int main() /*C程序就是执行主函数 ...
- C# WebService动态调用
前言 站在开发者的角度,WebService 技术确实是不再“时髦”.甚至很多人会说,我们不再用它.当然,为了使软件可以更简洁,更有层次,更易于实现缓存等机制,我是非常建议将 SOAP 转为 REST ...
- NGUI Label Color Code
UILabel的颜色代码 NGUI的Label文档:http://www.tasharen.com/?page_id=166 you can embed colors in [RrGgBb] form ...
- [No00002D] “大学生还不如农民工”背后的“身份教育”困境
日前,北京大学市场与媒介研究中心与赶集网联合发布了<90后毕业生饭碗报告>.而这份来自35万余份有效问卷的报告显示,今年应届毕业生平均起薪每月2443元,仅够买半部苹果手机,其中北京地区平 ...