JNI开发流程(Windows下)
2017-08-28 22:00
218 查看
目的
本次的目的是用java调用windows下C生成的.dll库。需要的工具 vs studio2013 ,eclipse
JNI(Java Native Interface):Java调用C/C++,C/C++调用Java的一套API编写native方法
首先写一个java工程,代码如下:public class JniTest { public native static String getStringFromC(); public static void main(String[] args) { } }
我们通过javah命令生成一个头文件。配置jdk环境变量。
切换到工程目录
javah命令,生成.h头文件
使用javah命令生成 注意要是这个类的完整类名刷新eclipse工程就会看见这个文件
复制.h头文件到CPP工程中
我们在vsStudio中新建一个项目。新建一个类
将生成的头文件和新建的文件放到一起。
实现.h头文件中声明的函数
回到vsStudio 选中头文件,然后添加->现有项,把jniTest_JniTest.h添加进去。我们查看一下jniTest_JniTest.h,发现报错。我们需要把jdk中的jni.h和添加进去。
进入到jdk目录
搜索jni.h
在jniTest_JniTest.h中修改
#include <jni.h>为
#include "jni.h"保存。
我们在01.c文件中可以编写代码了。
#include "jniTest_JniTest.h" //函数实现 C的函数名称:Java_完整类名_函数名 JNIEXPORT jstring JNICALL Java_jniTest_JniTest_getStringFromC (JNIEnv *env, jclass jcls){ //简单的实现 //将C的字符串转换为一个java字符串 return (*env)->NewStringUTF(env,"C string"); }
生成dll文件
接下来我们需要生成.dll文件,通过vs生成。debug->配置管理器->在活动解决方案平台中新建一个选项。
因为我是64位操作系统,选择:
属性这块选择生成dill动态库(右键项目->属性):
生成-解决方案。
之后就可以在eclipse中加载动态库了
如下代码:
public class JniTest { public native static String getStringFromC(); public static void main(String[] args) { String stringFromC = getStringFromC(); System.out.println(stringFromC); } //添加的动态库。 static { System.loadLibrary("JniProject"); } }
配置dll文件所在目录到windows系统的环境变量.
配置环境变量是为了找到库的位置,或者直接放到eclipse的工程目录下。也可以进行编译
重启Eclipse
最后将动态库的位置配置到环境变量里面就可以找到动态库了
运行结果:一些简要的知识点:
JNIEnv- 在C中:
JNIEnv 结构体指针别名
env二级指针
在C++中:
JNIEnv 是一个结构体的别名
env 一级指针
c中,函数执行过程中需要传入jnienv
JNIEXPORT jstring JNICALL Java_jniTest_JniTest_getStringFromC (JNIEnv *env, jclass jcls){ //简单的实现 //将C的字符串转换为一个java字符串 return (*env)->NewStringUTF(env,"C string"); }
C++,不用去传,因为C++中有this关键字。
JNIEXPORT jstring JNICALL Java_jniTest_JniTest_getStringFromC (JNIEnv *env, jclass jcls){ //不用传 return env->NewStringUTF("C string"); }
相关文章推荐
- windows下的Android JNI开发
- AndroidStudio进行JNI开发完整流程之环境配置
- Essential Windows Workflow Foundation(Windows 开发流程基础
- OSX上进行JNI开发的流程及命令
- Android jni简便开发流程
- Android Studio JNI/NDK 编程(二) Windows 下环境搭建 demo 开发
- jni开发流程
- Android的NDK开发(1)————Android JNI简介与调用流程
- JNI(一) - Android Studio简单开发流程
- JNI开发流程
- JNI/NDK开发指南(一)—— JNI开发流程及HelloWorld
- Android的NDK开发(1)————Android JNI简介与调用流程
- Idea开发Jni程序(Windows+Android)
- Android的NDK开发(1)————Android JNI简介与调用流程
- JNI开发流程(androidstudio)
- Android studio3.0 添加jni开发流程
- windows jni ndk流程
- 第八篇:jni的开发流程规范
- Android的NDK开发(1)————Android JNI简介与调用流程
- Android Studio NDk-JNi开发(二)AS下开发流程