1. 创建 HelloWorld.java 文件:
class HelloWorld {
private native void print();
public static void main(String[] args) {
new HelloWorld().print();
}
static {
System.loadLibrary("HelloWorld");
}
}
2. 编译之:javac HelloWorld.java
3.生成头文件:javah HelloWorld
然后你就发现产生了一个新的文件HelloWorld.h,内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
4.根据头文件编写对应的实现代码HelloWorld.c文件:
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj) {
printf("Hello World!\n");
return;
}
5.用vs的cl(在“开始”的搜索框里输入visual studio command prompt,用它即可)编译之生成dll:(这里对应的路径要根据你的安装路径对应修改,注意整个是一行命令,不要分行)
cl -IL:\Develop\Java\jdk1.8.0\include -IL:\Develop\Java\jdk1.8.0\include\win32 -MD -LD K:\Programming\Java\jni\example\HelloWorld.c -FeK:\Programming\Java\jni\example\HelloWorld.dll
成功之后就生成三个文件:HelloWorld.dll HelloWorld.exp HelloWorld.lib
6. 可以跑程序啦:java HelloWorld
然后就会输出:HelloWorld!
大功告成~
附:一个比较麻烦的地方时对Android项目中的java文件生成对应的h文件。
javah其实可以直接用java源文件生成头文件。语法会比较复杂:
> javah -classpath ../../bin/classes;<ANDROID_SDK_HOME>\platforms\android-<xx>\android.jar
-o HelloJNI.h com.mytest.JNIActivity
具体可参考
Android Native Development Kit (NDK)