这段时间在公司实习,因为项目要用jni的东西,所以也在晚上花时间学习一下jni,首先了解一下jni;

      

        JNI(Java Native Interface)是sun公司(当然现在已经归甲骨文了)定义的一套标准接口,如Dalvik,等等项目等Java虚拟机,都会实现JNI接口,共本地(C/C++)应用于Java VM相互调用。JNI: 可以供Java代码调用本地代码,本地代码也可以调用Java代码;

       JNI是Java平台中的一个强大特性。应用程序可以通过JNI把C/C++代码集成进Java程序中。通过JNI,开发者在利用Java平台强大功能的同时,又不必放弃对原有代码的投资;因为JNI是Java平台定义的规范接口,当程序员向Java代码集成本地库时,只要在一个平台中解决了语言互操作问题,就可以把该解决方案比较容易的移植到其他Java平台中。

        

       下面直接动手实现自己的第一个JNI应用,当然是我们学习编程语言那个输出神奇的HelloWorld!步骤如下:

        其中的代码下载链接地址:http://download.csdn.net/detail/jiangqq781931404/4459102

(一):在eclipse中新建一个java项目(JNI_01),在类中创建native函数 public native void printf();

(二):在项目工程路径下面,使用javah命令,把该native方法编程C语言的头文件,使用方法如下:

      

      此时会在bin目录下面生成一个.h文件(com_jiangqq_jni_TestJni.h),注意命名规则,和自己建立的包名和类名相关;现在我们就可以去建立自己的本地语言(C语言)的项目了,记得把这个头文件引入到本地语言项目中;


(三):建立本地语言项目(我使用C语言),使用VS2010开发工具,建立步骤如下:

       新建项目-选择VisualC++项目-win32控制台应用程序(输入存储路径)确定,下一步-应用程序配置,勾选DLL,和空项目-完成;截图如下:

       

      

      

(四)把第二步得到com_jiangqq_jni_TestJni.h头文件放入到本地语言项目文件夹中,并且引入头文件(右击项目的头文件-添加-现有项-找到这个头文件),截图如下:


      


(五)此时可以开始编写输出HelloWorld的代码了,但是让我们先打开头文件看看里面的实际内容:


/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_jiangqq_jni_TestJni */  #ifndef _Included_com_jiangqq_jni_TestJni #define _Included_com_jiangqq_jni_TestJni #ifdef __cplusplus extern "C" { #endif /*  * Class:     com_jiangqq_jni_TestJni  * Method:    printf  * Signature: ()V  */ JNIEXPORT void JNICALL Java_com_jiangqq_jni_TestJni_printf   (JNIEnv *, jobject);  #ifdef __cplusplus } #endif #endif 
    然后再源文件夹中新建source.cpp文件:编写如下
#include"com_jiangqq_jni_TestJni.h" #include<stdio.h> JNIEXPORT void JNICALL Java_com_jiangqq_jni_TestJni_printf 	(JNIEnv * env, jobject obj) { 	printf("HelloWorld!\n"); }

  此刻我们编译会发现VS中有如下的错误:


  这是头文件中找不到jni.h头文件,看到这个错误不用着急,我们去JDK的安装目录- bin-include-jni.h 可以找到这个文件,只要把这个头文件放入到该项目中,然后引入,再把com_jiangqq_jni_TestJni.h中的头文件引入方式写成#include"jni.h"就好


可以再次编译,又发现VS报了如下的错误:



一看又是jni_md.h头文件的错误,在刚刚的jdk目录上面中点击,win32文件夹,发现里面就有jni_md.h头文件,同样方法引入进来:此刻再次编译,就不会报错了;


(六)运行程序,生成dll文件,运行成功在该项目中的Debug文件夹中




(七) 设置环境变量

把该dll所在的路径,配置到path路径中,然后再Java工程进行使用该dll

package com.jiangqq.jni; /**  * 第一个JNI例子应用,使用本地语言(C语言)打印输出HelloWorld  * @author jiangqq  * <a href http://blog.csdn.net/jiangqq781931404>csdn 记录自己的成长历程</a>  */ public class TestJni { 	     public native void printf();     public static void main(String[] args) {     	System.loadLibrary("nativeCode");     	new TestJni().printf();     	 	} } 

运行结果当然就是HelloWorld!啦, 到此一个JNI输出HelloWorld的程序完成了


其中的代码下载链接地址:http://download.csdn.net/detail/jiangqq781931404/4459102