//java代码
public class Jnilx {
public static void main(String[] args) {
Jnilx jnilx=new Jnilx();
String password=jnilx.getPassWordString();
System.out.println("PassWor:"+password);
}
//使用 native修饰方法 此方法获取从c端方法里返回的数据
public native String getPassWordString();
}
打开cmd切换到java项目src目录,调用javah生成.h头文件
javah -d ../jni -jni com.xu.jni.Jnilx
-d …/jni 输出到jni文件 -jni生成头文件命令 com.xu.jni.Jnilx 类的完整包名
使用vs创建c++项目,然后将刚刚生成头文件拷贝到与.cpp文件同一文件夹内并引入头文件,打开头文件
引入头文件方法,添加现有项即可
发现这里报错,因为是引入外部头文件,所有需要将<>替换成“”
然后在找到jdk安装目录,在jdk内搜索到jni.h和jni_md.h,将这两个文件也复制到vs项目.cpp文件的文件夹内并引入头文件
编写c的代码
#include "com_xu_jni_Jnilx.h" 引入javah命令生成的头文件
JNIEXPORT jstring JNICALL Java_com_xu_jni_Jnilx_getPassWordString
(JNIEnv * env, jobject jobj){
return env->NewStringUTF("123456"); //返回一个字符串
}
点击调试选择最后一项属性
在配置属性的常规的配置类型里改为dll动态库
然后点击生成 生成解决方案
如上所示生成功,生成的dll文件在项目的debug文件夹内
public class Jnilx {
public static void main(String[] args) {
Jnilx jnilx=new Jnilx();
String password=jnilx.getPassWordString();
System.out.println("PassWor:"+password);
}
public native String getPassWordString();
//引入动态库
static {
// 引入加载我们的动态库
// System.loadLibrary :android 加载apk中的libs目录下 .so 库
// System.load : 加载一个具体路径上的 .so 库,去服务器上下载再进行加载(data/data)
System.load("E:/vsstudiocode/JniLx/x64/Debug/JniLx.dll");
}
}
在java代码中引入动态库,然后运行java代码,打印出c返回的字符串