JNI学习笔记(一)第一个JNI详细例子配图文

          这段时间在公司实习,因为项目要用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



       

     


  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值