???? 最近研究Android,涉及到JNI调用。虽然我对Java语言有所了解,但是还没有接触过JNI。今天在Unix Center的Ubuntu上面用JNI实现了“经典”的“Hello world”程序。通过这个简单的程序把JNI的一些小知识进行一下总结。
什么是JNI
???? JNI是Java native interface的简写,可以译作Java原生接口。Java可以通过JNI调用C/C++的库,这对于那些对性能要求比较高的Java程序无疑是一个福音。
???? 使用JNI也是有代价。大家都知道JAVA程序是运行在JVM之上的,可以做到平台无关。但是如果Java程序通过JNI调用了原生的代码(比如c/c++等),则Java程序就丧失了平台无关性。最起码需要重新编译原生代码部分。所以应用JNI需要好好权衡,不到万不得已,请不要选择JNI,可以选择替代方案,比如TCP/IP进行进程间通讯等等。这也是为什么谷歌的Android平台的底层虽然用JNI实现,但是他不建议开发人员用JNI来开发Android上面的应用的原因。将会丧失Android上面的应用程序平台无关性。
JNI的简单示例
???? 下面我就用JNI实现一个经典的“Hello World”程序。该程序在Java中通过JNI调用c函数实现“Hello World”的输出。创建该程序分为以下步骤:
1、创建一个Java程序(HelloWorld.java)定义原生的c/c++函数。
2、用javac编译HelloWorld.java生成HelloWorld.class。
3、用javah带-jni参数编译HelloWorld.class生成HelloWorld.h文件,该文件中定义了c的函数原型。在实现c函数的时候需要。
4、创建HelloWorld.c,实现HelloWorld.h定义的函数。
5、编译HelloWorld.c生成libHelloWorld.so。
6、在java虚拟机运行java程序HelloWorld。
???? 下面我们就一步一步来实现这个程序。