为了做好学习笔记,写下了今天学到的知识: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"); 这里要写绝对路径
最后的运行效果:
最后祝大家好运!