java 开发 jni

来源:互联网 发布:淘宝网店提升信誉 编辑:程序博客网 时间:2024/06/06 09:53

为了做好学习笔记,写下了今天学到的知识: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 stubSystem.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 __cplusplusextern "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 stubSystem.out.println("14111");System.out.println(getStringFromC());}
System.load("D:\\Android\\workspace3\\JniTest\\Project2.dll");  这里要写绝对路径

最后的运行效果:

最后祝大家好运!