java 开发 jni

为了做好学习笔记,写下了今天学到的知识:java 开发jni ,从hellow jni开始

开发jni 一共分为6布

1编写native方法

2生成.h头文件

3在visual studio中实现头文件中的方法

4生成.dll文件,复制到java工程

5调用native方法



1编写native方法

public class test {
	
	public native static String getStringFromC();

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("14111");
		System.out.println(getStringFromC());
		
	}

	static{
		System.load("D:\\Android\\workspace3\\JniTest\\Project2.dll");
		
	}
}

2生成.h头文件

打开命令行,在java工程src 目录下执行javah 命令


执行完命令后, 刷新自己的java项目,会看到有.h文件




3在visual studio中实现头文件中的方法

打开visual studio 创建新项目,把  jni.h  jni_md.h(这两个文件在AndroidSDK中)以刚才及java工程生成的 com_ake_Test_test.h头文件一起拷贝到visual studio中

头文件右键->添加->现有项,之后如下图


修改com_ake_Test_test.h中 的#include <jni.h>改为#include "jni.h"

/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class com_ake_Test_test */

#ifndef _Included_com_ake_Test_test
#define _Included_com_ake_Test_test
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_ake_Test_test
 * Method:    getStringFromC
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_ake_Test_test_getStringFromC
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif

同样修改jni.h 中的 #include <jni_md.h> #include "jni_md.h"  ,引用系统的文件用<>,引用自己的头文件要用" "

3在visual studio中实现头文件中的方法

#include "com_ake_test_Test.h"

//函数实现
JNIEXPORT jstring JNICALL Java_com_ake_Test_test_getStringFromC
(JNIEnv * env, jclass jcls){
	return (*env)->NewStringUTF(env, "hellow jni!");
}

4生成.dll文件,复制到java工程

选择工具栏中 debug--配置管理器--活动解决方案平台--新建--选择新平台--x64(我的电脑是64位)


配置项目生成.dll动态链接库

项目右键--常规--项目默认值--配置类型--动态库(.dll)


然后点击工具栏  生成--生成解决方案,这个时候在项目根目录就会有x64文件夹,复制其中的.dll文件到java 的根目录

c :                   java:

5调用native方法

public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("14111");
		System.out.println(getStringFromC());
		
	}
System.load("D:\\Android\\workspace3\\JniTest\\Project2.dll");  这里要写绝对路径

最后的运行效果:

最后祝大家好运!











猜你喜欢

转载自blog.csdn.net/qq_35599978/article/details/72802975