一、Java本地方法原理
原理可以用这幅图来描述:
二、使用工具
Visual Studio 2012,Eclipse
三、Demo开发步骤
1.在Eclipse中创建HelloNativeTest java工程
新建Demo类,类代码如下:
public class Demo {
//定义本地方法,用c/c++代码实现
public native void sayHello();
public static void main(String[] args){
//加载动态链接库
System.loadLibrary("Win32Project1");
Demo demo = new Demo();
demo.sayHello();
}
}
然后使用javac命令编译该文件(在cmd模式中),此时便会在同目录下生成.class文件。如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/a51b3a748089aaa56888d47b3c903858.png)
2. 使用javah命令生成.h文件
在命令行中,输入javah Demo命令,便会在同目录下生成HelloNativeTest.h头文件。头文件内容如下:
![](https://i-blog.csdnimg.cn/blog_migrate/ef636954a732ae5159a7ed55b6140543.png)
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class com_jni_Demo */
#ifndef _Included_com_jni_Demo
#define _Included_com_jni_Demo
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_jni_Demo
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_jni_Demo_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
此时Demo\src目录下有三个文件,如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/873ab9f7084154fd0bc4af0cc3303f07.png)
3.打开Visual Studio创建dll工程
创建dll工程,步骤如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/e3394c8e8f28f9aedc6818bd8f8405b0.png)
点击ok,接着再点击next,弹出下面的界面,注意选择dll工程和空项目选项。如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/4481dc94afd2607b0074cd8d048b3025.png)
在上一步生成的Demo.h文件拷贝到dll工程目录下,同时把该文件add进vs工程中。在工程中创建demo.cpp文件。cpp文件内容如下:
![](https://i-blog.csdnimg.cn/blog_migrate/e83d1e4719fec73b89354a1db898fe80.png)
#include <iostream>
#include "com_jni_Demo.h"
using namespace std;
//实现sayHello方法
JNIEXPORT void JNICALL Java_com_jni_Demo_sayHello(JNIEnv *env, jobject obj){
cout<<"Hello World"<<endl;
}
在建立整个工程之前,需要设置工程的include目录,如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/1ec4cade788fb35e7bf2d4ca51ca2b15.png)
其中C:\Program Files\Java\jdk1.8.0_51\include是你的jdk安装目录。
此时可以建立整个工程,生成dll。
特别注意,如果你的windows系统是64位的,则必须生成64位的dll,才能被jni调用。64位dll生成的方法是更改你的dll项目的Configure Manager配置,如下图所示,更改成x64
![](https://i-blog.csdnimg.cn/blog_migrate/1b19fba24f260e3577eb521bb9c76942.png)
![](https://i-blog.csdnimg.cn/blog_migrate/63b49a9dadb7250a91ed3f008f32abe1.png)
点击确定,此时可以Build整个工程了。建立完之后,会在\x64\Debug目录下生成demo.dll文件。
4. 在Eclipse中编译运行Demo
- 需要设置java.library.path,步骤是打开工程的属性界面,如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/6325c60d338f3ef591db9984651e3ba1.png)
点击确定,再点击应用。此时即可在Eclipse中运行Demo,在Console中会有以下输出:
![](https://i-blog.csdnimg.cn/blog_migrate/27ea7e2ddf39d33ba5d31e1dbfc6f213.png)