1.idea创建一个java类
严格来说,核心步骤并不是创建一个java类,而是创建一个方法,那个方法要被native修饰,这才是关键。
接着在TestNativeCode类当中声明我们的本地方法:
package com.wwj.nativecode;
public class TestNativeCode {
// 声明本地方法
public native void sayHello();
public static void main(String[] args) {
// // 加载动态链接库
// System.loadLibrary("nativeCode");
// TestNativeCode nativeCode = new TestNativeCode();
// nativeCode.sayHello();
}
}
注释掉的代码后面很快会用到,暂时不用管。
2.通过命令生成.h文件
在java类所在的文件下cmd,然后输入如下
javac -h ./ javaConnectC.java(注意:./指的是存在当前目录后边有个空格)
会生成.class和.h两个文件
3.再VS里新建项目,选择DLL
4.将生成的.h文件以及C:\Program Files\Java\jdk1.8.0_144\include下的jni.h和C:\Program Files\Java\jdk1.8.0_144\include\win32下的jni_md.h一起复制到所创建的VS项目下。然后将这三个.h文件引入。(右击头文件,点击添加,选择现有项,找到复制过来的.h文件选择即可。)
5.再源文件dllmain.cpp里复写生成的.h,代码如下
#include "pch.h"
#include "com_wwj_nativecode_TestNativeCode.h"
#include <iostream>
JNIEXPORT void JNICALL Java_com_wwj_nativecode_TestNativeCode_sayHello
(JNIEnv*, jobject){
printf("hello");
}
6.然后生成,这里注意使用release x64
7.在VS文件里找到生成的x64文件夹,在里边有release,然后打开找到.dll文件,将存储.dll文件的路径添加到path路径里。
8.在eclipse中使用java调用我们的native代码。
package jnidemo;
public class TestNativeCode {
// 声明本地方法
public native void sayHello();
public static void main(String[] args) {
// // 加载动态链接库
System.loadLibrary("nativeCode");
TestNativeCode nativeCode = new TestNativeCode();
System.out.println("dddd");
nativeCode.sayHello();
}}
9.运行就可以。
10.注意会出现一些错误:
运行java项目,如果声明了环境变量之后,没有重启Eclipse会报这样的错:
这个问题是因为我们创建的VS项目,是Win32的平台,而小巫的操作系统是64位的,所以我在Eclipse加载链接库的时候会报错。那么如何来解决这个问题呢,我们需要配置VS编译的平台,我们需要配置为x64位。
如果还不行,那就是.cpp文件里的方法和对应的.h里的不一样,好好看看改一下。