JNI学习一:编写HelloWorld程序

原创 2012年03月24日 18:35:39
转载请说明出处~

原文链接http://blog.csdn.net/zgyulongfei/article/details/7390658


本文教程翻译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 <jni.h>
/* 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 <jni.h>
#include <stdio.h>
#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!咯~~


本次学习源码下载链接,请点击这里

版权声明:本文为博主原创文章,未经博主允许不得转载。

JNI学习一:编写HelloWorld程序

转载请说明出处~ 原文链接:http://blog.csdn.net/zgyulongfei/article/details/7390658 本文教程翻译jni官方文档的部分内容。 要查...

通过JNI使用ndk来编写HelloWorld程序

在本篇文章之前,必须确保你的cdt、cygwin、ndk的环境已经搭建好,及确保你的JNI环境已经搭建好。。 1、MainActivity package com.njupt.ndkhel...

Android JNI helloworld程序编写与编译-图文解说

这是一个经典的helloworld程序,此程序本身并没有什么功能,但是其意义在于抛砖引玉。了解了JNI的机理,对于那些习惯于C程序的人很重要,在处理底层的读写等操作就可以在UI层用java轻而易举地实...

1Java程序通过JNI调用本地C++_第一个示例_HelloWorld

javacode:TestNative.java package com.cloud; public class TestNative { public static void main(Str...

Eclipse + vs2013 编写第一个JNI HelloWorld

网上很多地方都讲了如何通过JNI调用的方式打印HelloWorld,但是有时候我们实际操作起来可能会有些不一样,这里我们采用Eclipse + vs2013来编写。 1.1  项目目录结构    ...

JNI学习(一)----helloworld

环境如何搭建,我不介绍,谷歌一搜一大堆. 我主要就是实现一个简单的java代码调用C方法中打印"hello world!",主要包含以下几个步骤: 1.创建一个java类(HelloWorld.ja...

学习android JNI的那些事儿--------2. HelloWorld

看了网上好多牛人写的学习系列都是用HelloWorld作为开始,我们这里也用HelloWorld来开始我们的学习,首先我们来介绍下JNI吧。 JNI作为java代码和C/C++的桥梁而存在的,为了让...

android-----JNI学习 helloworld

转自:http://blog.csdn.net/yf210yf/article/details/9264587 1、新建android工程 ...

JNI入门 一个JNI的HelloWorld 程序

JNI是java本地编程接口。是 Java Native Interface的英文缩写。他能够使java代码与用其他编程语言编写的应用程序和库进行互操作。(其他编程语言大多是c,c++和汇编语言。) ...

JNI Helloworld

  • 2010年03月18日 22:49
  • 1KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JNI学习一:编写HelloWorld程序
举报原因:
原因补充:

(最多只允许输入30个字)