Java编程教程之 JNI(Java Native Interface) IDE

2.5   Eclipse中的JNI [要检查]

在Eclipse下编写JNI对于使用NDK开发Android应用程序非常方便。

您需要安装Eclipse和Eclipse CDT(C / C ++开发工具)插件。

第1步:创建Java项目

创建一个新的Java项目(说HelloJNI )和以下Java类“ HelloJNI.java ”:

公共类HelloJNI {
   静态的 {
      的System.loadLibrary( “你好”);  // hello.dll(Windows)或libhello.so(Unixes)
    }
 
    //声明本机方法
    private native void sayHello();
 
    //测试驱动程序
    public static void main(String [] args){
       new HelloJNI()。sayHello();  //调用本机方法
    }
 } 
   静态的 {
      的System.loadLibrary( “你好”);  // hello.dll(Windows)或libhello.so(Unixes)
    }
 
    //声明本机方法
    private native void sayHello();
 
    //测试驱动程序
    public static void main(String [] args){
       new HelloJNI()。sayHello();  //调用本机方法
    }
 } 

第2步:将Java项目转换为C / C ++ Makefile项目

右键单击“ HelloJNI ”Java项目⇒新建⇒其他...⇒转换为C / C ++项目(添加C / C ++性质)⇒下一步。

将出现“转换为C / C ++项目”对话框。 在“项目类型”中,选择“ Makefile项目 ”⇒在“工具链”中,选择“MinGW GCC”⇒完成。

现在,您可以将此项目作为Java和C / C ++项目运行。

第3步:生成C / C ++头文件

通过右键单击项目⇒新建⇒文件夹⇒在“文件夹名称”中,在项目下创建一个名为“ jni ”的目录以保留所有C / C ++代码,输入“ jni ”。

在“ jni ”目录下创建一个“ makefile ”,右键单击“ jni ”文件夹⇒new⇒文件⇒在“文件名”中输入“ makefile ”⇒输入以下代码。 请注意,您需要使用制表符(而不是空格)进行缩进。

 #为classpath定义一个变量
 CLASS_PATH = ../bin

 #在bin目录中定义.class的虚拟路径
 vpath%.class $(CLASS_PATH)

 #$ *匹配没有扩展名的目标文件名
 HelloJNI.h:HelloJNI.class
	 javah -classpath $(CLASS_PATH)$ * #为classpath定义一个变量
 CLASS_PATH = ../bin

 #在bin目录中定义.class的虚拟路径
 vpath%.class $(CLASS_PATH)

 #$ *匹配没有扩展名的目标文件名
 HelloJNI.h:HelloJNI.class
	 javah -classpath $(CLASS_PATH)$ * 

此makefile创建一个目标“ HelloJNI.h ”,它具有依赖项“ HelloJNI.class ”,并在HelloJNI.class (在-classpath下)调用javah实用程序来构建目标头文件。

右键单击makefile⇒制作目标⇒创建⇒在“目标名称”中,输入“ HelloJNI.h ”。

通过右键单击makefile⇒运行目标⇒构建⇒选择目标“ HelloJNI.h ”⇒构建,运行目标“ HelloJNI.h ”的makefile。 头文件“ HelloJNI.h ”应在“ jni ”目录中生成。 必要时刷新(F5)。 产出是:

制作HelloJNI.h 
 javah -classpath ../bin HelloJNI  
 javah -classpath ../bin HelloJNI 

或者,您也可以使用CMD shell运行make文件:

 //将目录更改为包含makefile的目录
 > 制作HelloJNI.h //将目录更改为包含makefile的目录
 > 制作HelloJNI.h 

您甚至可以使用CMD shell来运行javah :

 > javah -classpath ../bin HelloJNI javah -classpath ../bin HelloJNI 

第4步:C实现 - HelloJNI.c

通过右键单击“ jni ”文件夹⇒新建⇒源文件⇒在“源文件”中输入“ HelloJNI.c ”,创建一个名为“ HelloJNI.c ”的C程序。 输入以下代码:

 #include <jni.h>
 #include <stdio.h>
 #include“HelloJNI.h”
 
 JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv * env,jobject thisObj){
    printf(“Hello World!\ n”);
   返回;
 } 
 #include <stdio.h>
 #include“HelloJNI.h”
 
 JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv * env,jobject thisObj){
    printf(“Hello World!\ n”);
   返回;
 } 

按如下所示修改“ makefile ”以生成共享库“ hello.dll ”。 (再次使用tab来缩进行。)

 #为classpath定义一个变量
 CLASS_PATH = ../bin

 #在bin目录中定义.class的虚拟路径
 vpath%.class $(CLASS_PATH)

 all:hello.dll

 #$ @匹配目标,$ <匹配第一个依赖项
 hello.dll:HelloJNI.o 
	  gcc -Wl, -  add-stdcall-alias -shared -o $ @ $ <

 #$ @匹配目标,$ <匹配第一个依赖项
 HelloJNI.o:HelloJNI.c HelloJNI.h 
	  gcc -I“D:\ bin \ jdk1.7 \ include”-I“D:\ bin \ jdk1.7 \ include \ win32”-c $ <-o $ @

 #$ *匹配没有扩展名的目标文件名
 HelloJNI.h:HelloJNI.class
	 javah -classpath $(CLASS_PATH)$ *

 干净: 
	  rm HelloJNI.h HelloJNI.o hello.dll #为classpath定义一个变量
 CLASS_PATH = ../bin

 #在bin目录中定义.class的虚拟路径
 vpath%.class $(CLASS_PATH)

 all:hello.dll

 #$ @匹配目标,$ <匹配第一个依赖项
 hello.dll:HelloJNI.o 
	  gcc -Wl, -  add-stdcall-alias -shared -o $ @ $ <

 #$ @匹配目标,$ <匹配第一个依赖项
 HelloJNI.o:HelloJNI.c HelloJNI.h 
	  gcc -I“D:\ bin \ jdk1.7 \ include”-I“D:\ bin \ jdk1.7 \ include \ win32”-c $ <-o $ @

 #$ *匹配没有扩展名的目标文件名
 HelloJNI.h:HelloJNI.class
	 javah -classpath $(CLASS_PATH)$ *

 干净: 
	  rm HelloJNI.h HelloJNI.o hello.dll 

右键单击“ makefile ”⇒制作目标⇒创建⇒在“目标名称”中,输入“ all ”。 重复以创建目标“ clean ”。

通过右键单击makefile⇒运行目标⇒构建⇒选择目标“ all ”⇒构建,运行目标“ all ”的makefile。 产出是:

做所有
 javah -classpath ../bin HelloJNI
 gcc -I“D:\ bin \ jdk1.7 \ include”-I“D:\ bin \ jdk1.7 \ include \ win32”-c HelloJNI.c -o HelloJNI.o
 gcc -Wl, -  add-stdcall-alias -shared -o hello.dll HelloJNI.o 
 javah -classpath ../bin HelloJNI
 gcc -I“D:\ bin \ jdk1.7 \ include”-I“D:\ bin \ jdk1.7 \ include \ win32”-c HelloJNI.c -o HelloJNI.o
 gcc -Wl, -  add-stdcall-alias -shared -o hello.dll HelloJNI.o 

共享库“ hello.dll ”应在“ jni ”目录中创建。

第5步:运行Java JNI程序

您可以运行Java JNI程序HelloJNI 。 但是,您需要提供“ hello.dll ”的库路径。 这可以通过VM参数-Djava.library.path来完成。 右键单击项目⇒运行方式⇒运行配置⇒选择“Java应用程序”⇒在“主”选项卡中,输入主类“ HelloJNI ”⇒在“参数”,“VM参数”中,输入“ -Djava.library.path=jni “⇒运行。

您将看到输出“Hello World!” 显示在控制台上。

2.6   NetBeans中的JNI

[去做]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道格拉斯范朋克

播种花生牛奶自留田

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值