环境如何搭建,我不介绍,谷歌一搜一大堆.
我主要就是实现一个简单的java代码调用C方法中打印"hello world!",主要包含以下几个步骤:
1.创建一个java类(HelloWorld.java),在里面要申明native方法.
2.使用javac编译HelloWorld源码,得到一个HelloWorld.class.
3.使用 javah -jni来生成一个C头文件(HelloWorld.h),它里面会有你java类中native方法的原型.
4.写一个实现native方法的HelloWorld.c
5.把HelloWorld.c编译成HelloWorld.dll(windows)或者libHelloWorld.so(linux).
6.运行java HelloWorld程序
第一步:
建一个HelloWorld.java的java类
class HelloWorld {
private native void print();
public static void main(String[] args) {
new HelloWorld().print();
}
static {
System.loadLibrary("HelloWorld");
}
}
第二步:
通过javah生成HelloWorld.h头文件
此后会生成一个HelloWorld.h文件,在这文件中会有java类中native方法的原型
JNIEXPORT void JNICALL Java_HelloWorld_print (JNIEnv *, jobject);
第三步:
实现native方法:根据.h中方法原理在.c中具体实现打印"hello world!"
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
return;
}
- jni.h--提供了native方法实现必要的函数.
- stdio.h--使用print方法用到.
第四步:
新建一个jnibuild.bat内容是:
cl -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -LD %1.c -Fe%1.dll
java %1
通过 jnibuild HelloWorld来生成dll
例子代码git:git://code.csdn.net/hsw280826515/jni-helloworld.git