1.书写一个Java类
public class HelloWorld {
// 使用关键字native来声明方法
public native void displayInfor(String name);
// 加载动态链接库
static {
System.load("/Users/mac/Desktop/HelloWorldImpl.dylib");
}
public static void main(String[] args) {
HelloWorld helloWorld = new HelloWorld();
helloWorld.displayInfor("冯强");
}
}
其中public native void displayInfor(String name);,声明了一个本地方法,有参数name,返回类型void。
System.load(“/Users/mac/Desktop/HelloWorldImpl.dylib”);表示加载一个本地动态链接库。
2.使用下javac命令编译该文件:
Macs-MacBook-Pro:Desktop mac$ javac HelloWorld.java
3.使用javah命令处理HelloWorld.class文件
Macs-MacBook-Pro:Desktop mac$ javah -jni HelloWorld
4.打开HelloWorld.h文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: displayInfor
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayInfor
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
其中:
JNIEXPORT void JNICALL Java_HelloWorld_displayInfor
(JNIEnv *, jobject, jstring);
就是Java代码中对应的native方法,命名格式是 Java_类名_方法名(JNIEnv,jobject,这里是参数)。
5.修改HelloWorld.h文件中的#include
// 引入刚刚通过class文件生成的.h文件
#include "HelloWorld.h"
#include
#include
using namespace std;
/*
* Class: HelloWorld
* Method: displayInfor
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayInfor
(JNIEnv * env, jobject obj, jstring name) {
cout<<"你好,"<GetStringUTFChars(name, NULL)<
8.使用g++处理HelloWorld.cpp生成动态链接库
Macs-MacBook-Pro:Desktop mac$ g++ -dynamiclib -o HelloWorldImpl.dylib HelloWorld.cpp
9.复制HelloWorldImpl.dylib文件的地址,放入到java文件中
System.load("/Users/mac/Desktop/HelloWorldImpl.dylib");
11.运行Java程序
Macs-MacBook-Pro:Desktop mac$ java HelloWorld
你好,冯强
关注下方公众号,回复:jni.code
欢迎加入交流群:451826376
更多信息:www.itcourse.top