1、准备环境
安装androidstudio(或eclipse) 与 visual studio,配置好java的环境变量等准备工作。
2、创建java nativie方法
public class JniTest {
public int key = 100;
public native int getStringC();//方法名懒得改
}
3、javah命令生成.h头文件
4、将上一步生成的.h文件移动至vs解决方案中
jni.h 与 jni_md.h在jdk中有直接搜索后添加到项目(尽量直接把文件copy到项目目录下)如图
5、头文件声明的函数实现
#include "com_zhangteng_myapplication_JniTest.h"
JNIEXPORT jint JNICALL Java_com_zhangteng_myapplication_JniTest_getStringC(JNIEnv* env, jobject jobj){
jclass cls = env->GetObjectClass(jobj);
jfieldID fid = env->GetFieldID(cls, "key", "I");
jint jstr = env->GetIntField(jobj, fid);
printf("c++:%d", jstr);
env->SetIntField(jobj, fid, jstr+1);
return jstr;
}
c与c++JNIEnv用法有细微区别,c中是二级指针,c++中是一级指针,请自行转到声明查看
6、生成windows动态库
7、在项目中找到生成的.dll动态库并在java中加载
public class JniTest {
public int key = 100;
public native int getStringC();
static {
System.load("E:\\visual studio 2013\\Projects\\ConsoleApplication1\\x64\\Debug\\ConsoleApplication1.dll");
}
8、测试代码
public class STest {
@Test
public void main() {
JniTest jniTest = new JniTest();
System.out.println("java-before:" + jniTest.key);
System.out.println("java-ing" + jniTest.getStringC());
System.out.println("java-end:" + jniTest.key);
}
}