JNI 入门教程

 

一、JNI简介

   1、什么是JNI:

              JNI(Java Native Interface):java本地开发接口

              JNI是一个协议,这个协议用来沟通java代码和外部的本地代码(c/c++)

              外部的c/c++代码也可以调用java代码

       2、为什么使用JNI

              效率上 C/C++是本地语言,比java更高效

              代码移植,如果之前用C语言开发过模块,可以复用已经存在的c代码

              java反编译比C语言容易,一般加密算法都是用C语言编写,不容易被反编译

 

二、整体步骤如下:

1.编写java测试类

2.利用java测试类生成C头文件

3.利用C头文件编写C代码

4.生成C库

5.java调用测试

三、详解

1.编写java测试类

eclipse新建java项目:

新建类JNIdemo,其中:System.loadLibrary方法load的是C的类库,名称要与C一致。testHello方法为空方法,我们将在C中实现它。包名com.jin.test、方法名testHello都有与C中对应。

package com.jni.test;

public class JNIdemo {

    /**
     * @param args
     */
    public native void testHello();
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            System.loadLibrary("JniProject1");
            JNIdemo jniDemo =new JNIdemo();
            jniDemo.testHello();

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

}

2、利用java类生成C头文件

首先打开cmd命令行。然后切换到该java工程的Bin目录下执行以下命令(注意:类名称区分大小写):

javah -classpath . -jni com.jni.test.JNIdemo

然后我们可以在bin目录下找到生成的头文件:

3、用visual studio编写C代码

1.选择文件-》新建-》项目

2.选择(Win32),输入项目名称(即为上面System.loadLibrary方法load的是C的类库名称),项目地址,点击确定。

3.直接点击下一步

4.这里选择DLL,空项目,然后点完成。

5.生成如下如的项目结构

6.在源文件的文件夹上面右键,选择添加-》类。

7.直接点击添加

8.输入类名,点击完成。(C++类)

9.在你的系统JDK安装目录的include目录下有一个jni.h的文件,include的win32目录下有个jni_md.h文件,还有java工程的bin目录下的C头文件,一起拷贝到C工程的JniProject1目录下:(当前工程名就叫JniProject1,工程目录下还有一个JniProject1目录,工程目录-》JniProject1-》jni.h   com_jni_test_JNIdemo.h    jni_md.h)如下图:

当前目录为工程目录

 

 

10.在C项目的头文件文件夹上面右键,添加-》现有项

11.选择jni.h,com_jni_test_JNIdemo.h和jni_md.h

 12.打开com_jni_test_JNIDemo.h文件

13.将#include <jni.h>修改为#include "jni.h",错误提示消失。

代码:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class com_jni_test_JNIdemo */

#ifndef _Included_com_jni_test_JNIdemo
#define _Included_com_jni_test_JNIdemo
#ifdef __cplusplus
extern "C" {
#endif
    JNIEXPORT void JNICALL Java_com_jni_test_JNIdemo_testHello
        (JNIEnv *, jobject);
#ifdef __cplusplus
}

#endif
#endif

14.在TestJNI.cpp文件中写入如下代码:

代码:

#include "stdafx.h"

 

#include "com_jni_test_JNIdemo.h"
#include <iostream>
#include <stdio.h>

JNIEXPORT void JNICALL Java_com_jni_test_JNIdemo_testHello
(JNIEnv *, jobject) {
    printf("this is C++ print");
}

 

15.配置C工程,在解决方案上右键,选择属性

16.做如下配置

如果发现没有x64选择,则可以配置管理器添加。

4、在项目上右键生成,输出如下下信息

下面是生成的dll库

5、在Java项目下如下设置

填写dll库所在路径,保存即可。

运行java类,结果入下。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值