1、建一个java工程取名JniDemo,并新建一个类JniDemo,类里定义native方法,代码如下:
package com.jni.demo;
import java.io.ObjectInputStream.GetField;
public class JniDemo {
public native String getJniStr();
static{
System.loadLibrary("JniDemo");
}
public static void main(String[] args) {
JniDemo jd = new JniDemo();
String s = jd.getJniStr();
System.out.println("来自 jni的字符串:--- "+s);
}
2、生成jni的头文件;
打开windows命令行,进行项目src目录,并执行javah命令:
这样就会自动生成一个名叫jni的目录,里面有了相关的头文件
3、打开visual studio 2013并新建一个win32项目,将之前通过javah命令生成的头文件复制到visual studio 2013所建的项目目录,并导入,接着把jdk安装目录(如 Java\jdk1.8.0_20\)的include目录下的jni.h和include\win32目录中的jni_md.h两个头文件复制到visual studio 2013所建的项目目录,并导入
打开生成的jni头文件com_jni_demo_JniDemo.h并把#include <jni.h>改成#include "jni.h",代码如下
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class com_jni_demo_JniDemo */
#ifndef _Included_com_jni_demo_JniDemo
#define _Included_com_jni_demo_JniDemo
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_jni_demo_JniDemo
* Method: getJniStr
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_jni_demo_JniDemo_getJniStr
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
新建一个.c的源文件,记住一定是.c为后缀而不是.cpp
在JniDemo.c的源文件中实现生成的头文件的方法;代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "com_jni_demo_JniDemo.h"
JNIEXPORT jstring JNICALL Java_com_jni_demo_JniDemo_getJniStr
(JNIEnv *env, jobject job){
return (*env)->NewStringUTF(env, "jni test string");
}
设置visual studio 2013的项目为dll项目
生成dll动态库文件:
控件台会打出相关信息:
新建一个文件夹专门放自己生成的dll文件,这里我那的文件夹为D:\e\Clib,并把文件夹路径放入环境变量Path中,设置环境变量后最好重启一下计算机,以使之生效
把生成的dll文件放入该Clib目录,把dll文件名和java类中loadLibrary方法中的名称相同,这里是JniDemo.dll
运行效果如图: