当前位置:首页 > 资讯 > info6 > 正文

jni入门教程之HelloWorld

发表于: 2013-08-30   作者:cheerfor2008   来源:转载   浏览:
摘要: 简介JavaNativeInterface(JNI)是Java语言的本地编程接口,是J2SDK的一部分。在java程序中,我们可以通过JNI实现一些用java语言不便实现的功能。通常有以下几种情况我们需要使用JNI来实现。标准的java类库没有提供你的应用程序所需要的功能,通常这些功能是平台相关的。你希望使用一些已经有的类库或者应用程序,而他们并非用java语言编写的。程序的某些部分对速度要求比较

简介

Java Native Interface(JNI)是Java语言的本地编程接口,是J2SDK的一部分。在java程序中,我们可以通过JNI实现一些用java语言不便实现的功能。通常有以下几种情况我们需要使用JNI来实现。
标准的java类库没有提供你的应用程序所需要的功能,通常这些功能是平台相关的。
你希望使用一些已经有的类库或者应用程序,而他们并非用java语言编写的。
程序的某些部分对速度要求比较苛刻,你选择用汇编或者c语言来实现并在java语言中调用他们。
在《java核心技术》中,作者提到JNI的时候,建议不到万不得已不要使用JNI技术,一方面它需要你掌握更多的知识才可以驾驭,一方面使用了JNI你的程序就会丧失可移植性。

HelloWorld

下面我们开始编写HelloWorld程序,由于涉及到要编写c/c++代码因此我们会在开发中使用Microsoft Visual C++工具。

编写Java代码:

package com.lixing.jni;
public class HelloWorld {
	public native void helloWorld();
	static {
		System.loadLibrary("HelloWorld");
	}
	public static void main(String[] args) {
		new HelloWorld().helloWorld();
	}
}
注意我们的helloWorld()方法的声明,它有一个关键字native,表明这个方法使用java以外的语言实现。方法不包括实现,因为我们要用c/c++语言实现它。注意System.loadLibrary("HelloWorld")这句代码,它是在静态初始化块中定义的,系统用来装载HelloWorld共享库,这就是我们在后面生成的HelloWorld.dll(如果在其他的操作系统可能是其他的形式,比如HelloWorld.so)。

编译java代码:
javac HelloWorld.java,生成HelloWorld.class文件。

创建.h文件:

这一步中我们要使用javah命令生成.h文件,这个文件要在后面的c/c++代码中用到。
进入dos,在HelloWorld.class文件所属包的根路径下面,使用javah com.lixing.jni.HelloWorld命令。这样我们可以看到在根目录下生成了一个com_lixing_jni_HelloWorld.h文件,文件内容如下。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_lixing_jni_HelloWorld */

#ifndef _Included_com_lixing_jni_HelloWorld
#define _Included_com_lixing_jni_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_lixing_jni_HelloWorld
 * Method:    helloWorld
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_lixing_jni_HelloWorld_helloWorld
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

编写本地实现代码:

在这部分我们要用C/C++语言实现java中定义的方法,我们在VC++中新建一个Win32 Console Application Project,然后创建一个HelloWorld.cpp文件,内容如下:
#include "stdafx.h"
#include<jni.h>
#include"com_lixing_jni_HelloWorld.h"
#include<stdio.h>
JNIEXPORT void JNICALL Java_com_lixing_jni_HelloWorld_helloWorld (JNIEnv *, jobject){
	printf("HelloWorld!");
	return;
}

注意我们这里include了jni.h和刚才得到的com_lixing_jni_HelloWorld.h文件。因此你要在VC++里面设置好,jni.h在JAVA_HOME/include里面。Jni.h中又用到了"jni_md.h",在JAVA_HOME/include/win32里面。

生成HelloWorld.dll文件:

打开DOS窗口,切换到HelloWorld.cpp所在目录。
输入cl /c HelloWorld.cpp并回车,生成HelloWorld.obj。
再输入link /dll HelloWorld.obj并回车,生成HelloWorld.dll。

运行java程序:

将生成的dll文件放入system32文件夹即可。

运行结果:
HelloWorld!

jni入门教程之HelloWorld

编辑推荐
开发环境:windows2007, eclipse 做anroid越深发现用到底层开发的时候越多,但是我以前也没有搞过,
说明:这本是林信良(良葛格)的专栏的文章,但是受不了繁体字的折磨,改成中文了呵呵。 Java开发人
注意:此实例程序使用vim完成,而非使用Eclipse IDE,因此Java代码和C代码的源码文件的放置位置以及
该示例源于jni官方编程指南——《The Java™ NativeInterface Programmer’s Guide and Specificati
linux下jni编程指南之——HelloWorld 注:原文源自:http://www.cnblogs.com/hibraincol/archive/20
转载自http://www.cnblogs.com/hibraincol/archive/2011/05/14/2046049.html 该示例源于jni官方编程
一.关于于NDK 1.JNI简介   1.jni是Java native interface的缩写,java 本地接口。它提供了若干的A
这篇教程旨在让你在20分钟内学会使用twitter bootstrap创建一个站点。看完这个教程后你应该能够使用
看了网上好多牛人写的学习系列都是用HelloWorld作为开始,我们这里也用HelloWorld来开始我们的学习
简介 jni实现hello world,以及生成so文件的步骤 介绍 下载NDK并解压 配置NDK的环境变量 配置生成头
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号