转载请说明出处~
本文教程翻译jni官方文档的部分内容。
要查看Jni官方文档,请点击这里
先感叹一下时光如水,岁月不留人哇有木有!!!认真想想在XMU的这三年,真的改变了我好多。
我还清楚地记得学习C语言写的第一个程序就是Hello,world!
那个时候对编程语言真是一窍不通,不过也正是从那个时候开始,对编程产生了兴趣~
闲话不多说,既然是入门教程,我们就从简单的Hello,world开始。
这个程序使用java代码调用C函数来输出Hello,world.
步骤如下:
1、 创建一个HelloWorld.java类,并在类中声明native方法
2、 利用javac命令编译HelloWorld.java产生HelloWorld.class
3、 利用javah –jni命令产生C头文件HelloWorld.h,该头文件为native方法的实现提供了函数原型。
4、 写出native方法HelloWorld.c
5、 将HelloWorld.c编译成native类库,可以创建HelloWorld.dll或HelloWorld.so
6、 运行HelloWorld程序,HelloWorld.class与(HelloWorld.so/HelloWorld.dll)会在运行时候被加载
流程图:
实践才能出真知,下面我们正式开始啦~
注:本人操作系统为Windows 7
1、在F盘创建目录【HelloWorld】,然后编写HelloWorld.java
public class HelloWorld {
//声明本地方法print()
public native void print();
public static void main(String[] args) {
//创建一个HelloWorld对象
HelloWorld helloWorld = new HelloWorld();
//调用对象方法print
helloWorld.print();
}
//类装载器,在类被使用时候加载
static{
System.loadLibrary("HelloWorld");
}
}
2、编译HelloWorld.java生成HelloWorld.class
3、创建HelloWorld.h文件
查看该头文件内容
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
看到声明的方法了吗?没错,就是它——Java_HelloWorld_print(JNIEnv*,jobject);
第一个参数是JNIEnv的接口指针,第二参数是HelloWorld对象的引用,类似于C++中的this指针。
注:JNIEXPORT和JNICALL两个宏命令可以无视之~
【Java代码】通过这个【函数接口】来调用底层【C代码】
4、编写HelloWorld.c实现这个方法
#include
#include
#include "HelloWorld.h"
JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("yulongfei says:");
printf("Hello, world!\n");
return;
}
5、将HelloWorld.c编译为native类库
由于我是windows 7操作系统,所以编译成HelloWorld.dll库,这里需要使用工具Visual Studio 2008
操作步骤:
Step 1:启动VS2008 --> 文件 --> 新建项目 --> Visual c++ --> Win32控制台应用程序
Step 2: 名称输入HelloWorld,程序保存路径你自己定,,点击确定
Step 3:在向导中选择【下一步】。在应用程序类型中,选择【DLL】;在附加选项中,选择【空项目】。选择【完成】
Step 4: 打开资源管理器,将HelloWorld.h复制到【头文件】中,将HelloWorld.c复制到【源文件】中。
Step 5: 选中菜单栏的【生成】-->【生成HelloWorld】;或者直接按下快捷键Shift+F6
注:如果报错
请你定位到jdk安装目录下,然后将【include\jni.h】以及【include\win32\jawt_md.h】和【include\win32\jni_md.h】这三个文件拷贝到你VS安装目录的VC\include下,我的是D:\ProgramFiles\Microsoft Visual Studio 9.0\VC\include。
Step 6: 定位到VS2008刚刚建立的HelloWorld工程目录下,将Debug目录下的HelloWorld.dll 拷贝到F盘【HelloWorld】的目录下,接下来就可以运行程序了。
6、运行程序
哈哈,开心吧,成功输出:Hello, world!咯~~
本次学习源码下载链接,请点击这里!