开始编写JNI

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;
	}
}


3.编写一个Test类

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);
}


6.编译C/C++代码,生成dll或so文件。

   编译时需要两个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:这里只是记录步骤,具体代码意义等搜索相关文档。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值