java JNI开发

来源:互联网 发布:淘宝退货流程 编辑:程序博客网 时间:2024/05/22 15:39

1:简单JNI开发步骤:

1.1开发Java类

1.1.1 native方法的开发:                                                                                  

有一个native修饰的方法(此方法即本地方法不用实现);

Eg: public native void dispalyHelloworld();

1.1.2 加载dll/so文件

写一个静态块来加载dll/so文件

Eg: static {

         System.loadLibrary("Hello");

     }

1.1.3 调用native修饰的本地方法

 调用native修饰的本地方法,其实和调用其他方法一样,类对象.方法名

 Eg: publicstaticvoidmain(String[] args) {

        newHello().dispalyHelloworld();

    }

1.1.4 java类的整体代码如下:

publicclassHello {

    public native void dispalyHelloworld();

     static {

         System.loadLibrary("Hello");

     }

 

     public staticvoidmain(String[] args) {

        newHello().dispalyHelloworld();

    }

}

1.2 使用jdk来生成java的class文件对应的c/c++头文件

1.2.1 首先测试下jdk环境是否配置成功

Cmd----随便目录下运行 javah,如果出现 javah用法选项之类的说明jdk配置成功,如果没有出现则重新配置jdk环境;

1.2.2 jdk生成头文件

  Jdk的安装目录下的bin下的javah.exe专门用来生产头文件的,

所以在dos下,进入项目目录下的bin目录下Eg: E:\java\javaworkspace\JNITest\bin

然后使用javah class文件名/javah 包名.class文件名 Eg:javah  com.dz.jni.Hello

就会在bin目录下生成一个包名_类名.h文件,eg:  com_dz_jni_Hello.h

Eg:上面的Hello类生产的对应头文件为:

#ifndef _Included_Hello

#define _Included_Hello

#ifdef __cplusplus

extern "C" {

#endif

/*

 *Class:     Hello

 *Method:    dispalyHelloworld

 *Signature: ()V

 */

JNIEXPORT void JNICALLJava_Hello_dispalyHelloworld

 (JNIEnv *, jobject);

 

#ifdef __cplusplus

}

#endif

#endif

1.3 开发dll文件(vc++作为开发工具)

1.3.1 使用vc++/vs创建一个 dll项目;

   新建—工程—win32Dynamic-Link Library—项目名称---一个简单的Dll工程

1.3.2 建立头文件

   文件---新建—文件—c/c++Header File --- 复制java生成的头文件(Eg: com_dz_jni_Hello.h)

 然后在复制文件内容到刚建的头文件中;

1.3.3 开发对应方法

  复制头文件中的方法,添加大括号,因为生产的方法的参数只有参数类型,没有参数变量,我们可以自己在参数类型后添加参数变量,然后进行一切操作;

Eg:

JNIEXPORT void JNICALLJava_Hello_dispalyHelloworld

(JNIEnv *, jobject){

 printf("Hello");

}

1.3.3 导入头文件:

#include "Hello.h"

1.3.4 运行生成dll文件

  按F5运行生成对应的dll文件(如有错误可参考JNI 错误信息),在项目目录下的debug下可以看对应的dll文件;

1.3.5 c/c++ source File内容:

Eg: #include "stdafx.h"

#include "Hello.h"

 

JNIEXPORT void JNICALL Java_Hello_dispalyHelloworld

(JNIEnv *, jobject){

 printf("Hello");

}

 

1.4 dll放入java项目

  把生产的dll文件复制java项目的bin目录下(注:如果有包文件,dll要与包文件是同级目录,不能把dll直接放到包文件夹下了,总之就是在bin目录下就对了)