最近需要对RFID读写器进行操作,厂家提供的都是c++的SDK,以前都是在delphi下进行开发也还能用。但是现在实在懒得再去开启Delphi去进行那些数据库的操作(ORM用懒了)。于是考虑怎样在Java下直接调用SDK,前台使用SWT去实现。SWT不用多说,用了这么久感觉还是比较顺手的,非常适合做那些对界面要求不高的应用,大的其实也可以RCP上去也不错,扯远了。今天仔细学习了一下JNI的开发和使用,由于习惯了Eclipse,于是直接选用EclipseCDT来进行C++的开发,网上这样的文章也很多,这里算是留个学习记录吧。
=================正式的分割线=======================
1、下载EclipseCDT(这次用的是Windows,暂时就不写Linux下的)
没啥说的,下载吧(今天家里电信ADSL免费提速到12M,第一次看到迅雷保持在1M/S以上,那个爽啊·······)
2、下载安装MinGW
地址:http://sourceforge.net/projects/mingw/files/
在目录的最上方有一条“Looking for the latest version? Download mingw-get-inst-20120426.exe (662.7 kB)”,可以直接下载最新的安装包,因为经常更新这里就不给链接了,直接去点吧
3、安装MinGW
安装目录默认选C:\MinGW就不变了,记得把C++编译器选上,其他的感觉没有太大意义,暂时就不选了
4、为MinGW修改系统变量
右键我的电脑->属性->高级->环境变量->系统变量中添加
MINGW_HOME=C:\MinGW
LIBRARY_PATH = %MINGW_HOME%\lib
C_INCLUDE_PATH = %MINGW_HOME%\include
在PATH变量的最后增加 ;%MINGW_HOME%\bin
将C:\MinGW\bin目录下的mingw32-make.exe 改名为 make.exe
5、修改Eclipse配置
为了让CDT能够采用MinGW进行编译,需要在 Eclipse 中进行设定
Window->Preferences->C/C++->Make->New Make Project->New Builder->Binary Parser 取消 Elf Parser(如果本来就没选就别折腾他了) 改选 PE Windows Parser
6、新建一个Java项目
HelloJNI.java代码:
package com.strong.jni;
public class HelloJNI {
public native void sayHello();
static {
System.loadLibrary("libStrongCDT");
}
/**
* @param args
*/
public static void main(String[] args) {
HelloJNI hjni = new HelloJNI();
hjni.sayHello();
System.out.println("==========");
}
}
7、生成jni的h头文件
为了方便,做一个jni.bat文件放到“StrongJNI\bin”目录
set java_home=C:\Program Files\Java\jdk1.6.0_32
set path=%java_home%\bin
set class_path=%java_home%\lib;%java_home%\lib\dt.jar;%java_home%\lib\tools.jar
javah -jni com.strong.jni.HelloJNI
@pause
路径根据自己的修改吧,运行后生成一个h的头文件com_strong_jni_HelloJNI.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_strong_jni_HelloJNI */
#ifndef _Included_com_strong_jni_HelloJNI
#define _Included_com_strong_jni_HelloJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_strong_jni_HelloJNI
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_strong_jni_HelloJNI_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
8、建立JNI的C++项目
新建一个MinGW的标准C++项目StrongCDT,将刚才的com_strong_jni_HelloJNI.h拷贝到项目目录
最终的项目为:
HelloJNI.c代码如下,编写好之后点锤子编译,会在debug目录生成对应的dll文件
#include "com_strong_jni_HelloJNI.h"
JNIEXPORT void JNICALL _Java_com_strong_jni_HelloJNI_sayHello(JNIEnv *env, jobject obj) {
// 这里是方法实现
printf("Hello World Native\nSimen");
}
此时,如果代码报错,请增加java的includes,右键项目选Properties -> C/C++ General -> Paths and Symbols在Configuration中选择[All configurations];然后在Includes页签中的Language选择GNU C,单击Add按钮添两个路径如下,java安装路径按照自己的选,注意必须两个都加入:
9、java项目调用dll
把生成好的dll拷贝到项目的lib目录,然后在Run -> Run Configurations -> Arguments中的VM arguments 中添加-Djava.library.path=./lib
10、执行成功!
- 大小: 36.5 KB
- 大小: 85.2 KB
- 大小: 72.1 KB
- 大小: 61.7 KB
- 大小: 63.6 KB
- 大小: 99.3 KB
- 大小: 86.9 KB
分享到:
相关推荐
NDK开发环境安装和一个简单的JNI例子
JNI开发 eclipse相关开发环境的搭建
本文档根据网上的学习资料和本人的亲身实践,详细讲解了在windows系统平台下如何配置ndk的过程。 1、安装cygwin 2、下载ndk ...4、下载安装eclipse插件cdt 5、ndk与eclipse的集成 6、运行实例hello-jni
Eclipse_Jni_Opencv_NDK 配置JNI编译环境,一键触发,以Opencv为实例,包含 mk 文件 Demo (还不够一个百个字节么?)
网上虽然可以找到相关的,但是都是零星散乱,需要用大量的时间去摸索.这篇独家专作将为你节省大量摸索时间和网络搜索时间.让你不走弯路,快速入门.
网上有关在linux中讲android jni(ndk) eclipse开发环境的搭建的资料有很多,但大多都非常的繁琐,本来是简单的事情描述的却很复杂。下面结合我的实际把步骤写出来,其实很简单一步就可完成……
DELPHI开发JNI必备 jni.pas 包含文件 jni.pas JNI_MD.INC
eclipse ndk Hello-jnieclipse ndk Hello-jnieclipse ndk Hello-jnieclipse ndk Hello-jni
jni程序开发简单示例和说明(eclipse + Microsoft Visual Studio 2010),包括eclipse工程代码和visual studio2010工程代码,和doc说明文件
JNI的API文档,类型映射表等,都是开发非常有用的东西!
本实例为java对jni的调用,实现c到java的字符串传递. 详细见:http://blog.csdn.net/xuwenneng/article/details/54311589
用Delphi开发JNI.docx
在Windows下使用Eclipse及Sequoyah开发Android JNI项目工程
这是Android NDK开发标准的JNI和Android.mk编写模版,里面的一些东西可能涉及我的项目,但不影响观看
eclipse 环境下关于android jni开发所用到的基本知识点的梳理,有详细的注解,里面还附带一份整个JNI开发的流程文档,环境配置,踩过的坑等等
本文档是自己一边实际操作一边记录完成,每一关键步骤都有截图与详细说明,本是自己的记录也是拿出来与大家分享一下,希望帮助更多的人,因为付出的很多心血,所以没有0积分分享,见谅。方法2的缺点是首次配置复杂,...
本文档是自己一边实际操作一边记录完成,每一关键步骤都有截图与详细说明,本是自己的记录也是拿出来与大家分享一下,希望帮助更多的人,因为付出的很多心血,所以没有0积分分享,见谅。方法1的特点是配置简单,缺点...
Eclipse+CDT+GDB调试android NDK程序
jni实例 已Eclipse测试可用,让你清楚的了解jni调用的流程.
Android JNI 开发 步骤 , 绝对详细