`
tmj_159
  • 浏览: 701112 次
  • 性别: Icon_minigender_1
  • 来自: 永州
社区版块
存档分类
最新评论

JNI 详细步骤

 
阅读更多

      上次玩JNI大概是一年前的事情了,发现现在用还需要查资料,真是好记性赢不了三寸烂笔头,刚好用这个了,记下以后省的找资料了。

 

一、准备环境

只列出我这次测试用到的环境和工具:

1. jdk

    Version: 1.7

2. eclipse

    Version: Kepler Service Release 1

    Build id: 20130919-0819

3. visual studio 2012

4. ant

    Version 1.9.2

想对目前来说都是比较新的版本

 

二、编写java类

package cn.tang.demos.jni;

public class JNITest {
    public native int callMethod(int i,String s1);
}

 

三、编译和生成.h头文件

1.通过cmd命令生成

 2.通过ant 脚本生成

<project name="JNI Builder" default="build" basedir=".">
	<target name="init" depends="clean">
		<property name="project-src" value="${basedir}/src" />
		<property name="jni-folder" value="cn/tang/demos/jni" />
	</target>

	<target name="complie" depends="init">
		<mkdir dir="build" />
		<javac srcdir="${project-src}" destdir="build" debug="true" deprecation="off" encoding="UTF-8">
			<include name="${jni-folder}/**/*" />
			<exclude name="${jni-folder}/JNITestMain.*" />
			<classpath>
			</classpath>
		</javac>
	</target>

	<target name="build" depends="complie" description="Builds .h header file">
		<javah destdir="build" classpath="build" >
			<class name="cn.tang.demos.jni.JNITest"/>
	        <class name="cn.tang.demos.jni.JNITest2"/>
		</javah>
	</target>

	<target name="clean" description="Removes all generated artifacts">
		<delete dir="build" />
	</target>
</project>

    简要说明,源代码文件夹下有三个文件分别是JNITest.java,JNITest2.java,JNITestMain.java ,最后一个文件是main 方法的测试类,所以在编译成class文件的时候被我去掉了,所以最后生成只有两个.h文件。

 

四、创建dll项目

 

1.创建一个DLL的项目

 

 2.修改项目设置,最好debug 和release都修改下

 

3.删除额外的文件



 

五、根据头文件编码生成dll

1.首先加入头文件依赖的头文件



 

2. 根据头文件的函数声明实现函数

#include "cn_tang_demos_jni_JNITest.h"
#include <stdio.h>

JNIEXPORT jint JNICALL Java_cn_tang_demos_jni_JNITest_callMethod
  (JNIEnv * env, jobject jo, jint ji, jstring js){
	  printf("jstring is %s",js);
	  return ++ji;
}

 

3. 编译生成dll

build 即可

 

六、使用dll

package cn.tang.demos.jni;

public class JNITestMain {

    public static void main(String[] args) {
        System.load("D:\\workspace\\project\\MyTest\\Release\\JNITest.dll");
//        System.loadLibrary("JNITest");
        int ret=new JNITest().callMethod(19, "hello");
        System.out.println("ret is "+ret);
    }

}
  • 大小: 59.2 KB
  • 大小: 37.7 KB
  • 大小: 42.7 KB
  • 大小: 8.9 KB
  • 大小: 76.4 KB
  • 大小: 79 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics