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