JNI的使用
来源:互联网 发布:qq短信解冻软件 编辑:程序博客网 时间:2024/06/07 05:11
1. 首先在Java类中声明一个native方法
//native关键字修饰的方法,其内容是C/C++编写的,java中不必为它编写具体的实现
public native void sayHello();
2. 用java的工具javah.exe生成包含native方法定义的C/C++头文件
- javah.exe在jdk的安装路径的bin目录下
- 到native方法所在java文件生成的class文件路径下运行命令 javah 包名.类名
以video1.TestNative为例,TestNative.class的路径为: C:\E\java\workspaces\myeclipseblue\JNITest\bin
执行命令:C:\E\java\workspaces\myeclipseblue\JNITest\bin>javah video1.TestNative
这样就会在C:\E\java\workspaces\myeclipseblue\JNITest\bin目录下产生一个video1_TestNative.h的C/C++头文件
3. 头文件中方法名的结构
例:JNIEXPORT void JNICALL Java_video1_TestNative_sayHello(JNIEnv *, jobject);
方法名Java_video1_TestNative_sayHello,以Java开头,以_分隔,依次为包名(包名之间也用下划线分隔)、类名、在java中声明的native方法名
4. 按照生成的C/C++头文件来写C/C++源文件
VC++6.0下,新建一个win32 Dynamic-link Library 工程,工程名为NativeCode,路径为C:\Program Files\Microsoft Visual Studio\MyProjects\NativeCode
将第二步生成的头文件video1_TestNative.h、jni.h、jni_md.h 拷贝到C:\Program Files\Microsoft Visual Studio\MyProjects\NativeCode下
在VC++6.0中引入这些该头文件
jni.h在C:\Program Files\Java\jdk1.6.0_14\include下,jni_md.h在C:\Program Files\Java\jdk1.6.0_14\include\win32
编写C/C++源代码source.cpp
5 . 编译 source.cpp,生成动态 连接库NativeCode.dll
6. 将dll文件加入到环境变量path路径下。
Eclipse启动后会加载环境变量Path,如果之后对path进行改变,Eclipse需要重启才能重新加载新的环境变量
7. java类中加载dll,然后调用声明的native方法
java类中加载dll:System.loadLibrary("NativeCode");
完整的java代码
- public class TestNative {
- //native关键字修饰的方法,其内容是C/C++编写的,java中不必为它编写具体的实现
- public native void sayHello();
- public static void main(String[] args) {
- System.loadLibrary("NativeCode");
- new TestNative().sayHello();
- }
- }
C/C++代码 source.cpp文件:
- #include "video1_TestNative.h"
- #include <iostream>
- using namespace std;
- JNIEXPORT void JNICALL Java_video1_TestNative_sayHello(JNIEnv * env, jobject obj){
- cout<<"Hello Native Test !"<<endl;
- }
- JNI的使用(ZT)
- JNI 的使用
- JNI的使用
- 使用j2se的jni
- JNI 的使用
- JNI的简单使用
- JNI的使用
- JNi 的使用
- JNI的使用
- JNI的使用
- jni的学习使用
- jni的使用
- Android JNI的使用
- JNI的使用
- JNI的使用
- jni的使用
- jni的简单使用
- JNI的一些使用
- mtk6582开发备忘
- cocos2d-x游戏开发(二)之创建第一个项目
- markdown 快速入门
- 修改Android工程的名称、安装路径
- phoenix+hbase 执行sql语句代码示例
- JNI的使用
- 浏览器UI线程 和 js线程
- Yii2.0 数据库查询
- java中获取比毫秒更为精确的时间
- OC学习笔记二---面向对象
- 1.2 [Android] 内存泄漏调试经验分享 (一)
- easyui中的colModel中的一些参数
- Spring HttpInvoke实现,以及效率提升!
- leetcode_Intersection of Two Linked Lists_easy_主要是方法