1.编写一个Java和C/C++接口类。
package com.MyCode.JNI;
import com.MyCode.JNI.Bean.NetworkInfo;
<pre name="code" class="java">
public class Network {public Network() {}static {System.loadLibrary("ArcNetwork");}public native void getNetworkInfo(NetworkInfo info);}
2.上面代码中有个NetworkInfo Bean类:
package com.<span style="font-family: Arial, Helvetica, sans-serif;">MyCode</span>.JNI.Bean;
public class NetworkInfo {
private String IP;
public String getIP() {
return IP;
}
public void setIP(String iP) {
IP = iP;
}
}
package com.MyCode.JNI.Test;
import com.MyCode.JNI.Network;
import com.MyCode.JNI.Bean.NetworkInfo;
public class NetworkTest {
public static void main(String[] arg){
Network network = new Network();
NetworkInfo info = new NetworkInfo();
network.getNetworkInfo(info);
System.out.println(info.getIP());
}
}
4.编译Network类,生成C/C++所用的h文件。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_MyCode_JNI_Network */
#ifndef _Included_com_MyCode_JNI_Network
#define _Included_com_<span style="font-family: Arial, Helvetica, sans-serif;">MyCode</span>_JNI_Network
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_MyCode_JNI_Network
* Method: getNetworkInfo
* Signature: (Lcom/MyCode/JNI/Bean/NetworkInfo;)V
*/
JNIEXPORT void JNICALL Java_com_MyCode_JNI_Network_getNetworkInfo
(JNIEnv *, jobject, jobject);
#ifdef __cplusplus
}
#endif
#endif
5.编写C/C++代码
#include "com_ArcSoft_JNI_Network.h"
JNIEXPORT void JNICALL Java_com_MyCode_JNI_Network_getNetworkInfo(JNIEnv * env, jobject obj, jobject objInfo)
{
jclass order_class = env->GetObjectClass(objInfo);
jmethodID setIP_method = env->GetMethodID(order_class, "setIP", "(Ljava/lang/String;)V");
jstring ip_str = env->NewStringUTF("172.17.230.161");
env->CallObjectMethod(objInfo, setIP_method, ip_str);
}
编译时需要两个jni的头文件。jni.h jni_md.h 这两个文件在JDK的include目录中可以找到。
7.运行测试。
可以将java工程打包成jar,copy到linux等环境下运行。需要设置环境变量。
export JAVA_HOME=/usr/Java/jdk1.7.0_75
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
export LD_LIBRARY_PATH="/root/java/JNINetwork/bin":$LD_LIBRARY_PATH
执行:java -jar Network.jar
输出得到结果:172.17.230.161
PS:这里只是记录步骤,具体代码意义等搜索相关文档。