Jni学习之hello world

最近想捣鼓下ndk,无奈对jni了解甚少,只好慢慢来了,从hello world开始。奋斗

------------------------------------------------------------------------------------------------------------

准备工具:

(由于电脑用的是win系统...)

Dev c++ 5.2.0.3

eclipse

jdk6


开始编写:

java代码编写


public class JniDemo {

	static{
		System.loadLibrary("firstdll");
	}//加载库,该库实现了sayHellow方法
	
	
	//下面声明native方法sayHellow
	public  native void sayHello();
	
	
	public static void main(String[] args) {
	  new JniDemo().sayHello();
	}
}

以上java代码十分简单,声明了一个native方法,并且在加载class的时候就执行System.loadLibrary("firstdll");加载native库

dll文件的命名需要注意一下,如上名为firstdll的库,在win32系统上会去寻找firstdll.dll的文件,如果是linux下的话则是libfirstdll.so.

显示我现在用的是win系统,那么我们新建一个c++ 的dll工程,名字叫做firstdll.


接下来就可以开始编写c代码了,我们需要用先前写好的java编译好的class文件.进入java工程的bin目录(请确保存在class文件)

在cmd命令行下执行 javah -classpath . -jni cn.my.JniDemo

那么就会生成一个名为cn_my_JniDemo.h的文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class cn_my_JniDemo */

#ifndef _Included_cn_my_JniDemo
#define _Included_cn_my_JniDemo
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     cn_my_JniDemo
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_cn_my_JniDemo_sayHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

把这个h文件放到先前建好的工程firstdll中

接着就可以include这个h声明,进行代码实现了


接着就可以很开心的生成dll了.....疑问

细心的人一定发现少了什么,是的,cn_my_JniDemo.h中有这么一行:#include <jni.h>

jni.h声明了c中与java对应的类型。

我们需要引入两个h文件,它们位于 F:\jdk1.6\include\jni.h 和 F:\jdk1.6\include\win32\jni_md.h (jdk路径根据实际情况而定)

引入方法1:将两个h文件拷到c工程下,并且把#include <jni.h>修改为 #include "jni.h"

引入方法2:使用工具引入,这里用dev c++引入。


之后就是编译程序.....在项目工程将会出现


将dll放到java工程中,运行测试吧


成功了~~得意

关于dll的放置位置也需要注意,要直接放到java工程下,不然会找不到dll库的。(本想把它放到lib文件夹中,但发现怎么折腾都不行....重点是学习jni,这些细节日后再纠结吧)


转载注明:http://blog.csdn.net/always4321/article/details/41723087


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值