主要有两种方式JNI和JNA()
JNI方式
1.将C程序打包成dll文件(windows环境霞)或者.so文件(Linux环境下)
window环境下
步骤如下:
步骤1.通过java生成.h头文件
方法一:通过命令直接生成
javac 类名.java//编译成.class文件
javah 类名 //生成头文件.h .javah的命令是:javah -classpath 文件所在的包的上一级目录 包名+类名
//例子 需要注意的是javac生成的.class文件最好不要和.java在一个文件夹中
>javac JNIFallAlgorithm.java
>javah -classpath E:\gitee\fall\fall-detection\src\main\java com.dlxx.falldetection.util.JNIFallAlgorithm
方法2:通过idea配置
构建项目以生成.class文件
生成.h文件
这里使用idea的external tool(外部工具)功能,打开全局设置依次展开 工具(tools)->外部工具(external tools)
点击上方加号以添加一个外部工具,如下配置:
工具设置中的内容:
程序:$JDKPath$\bin\javah
参数:-classpath $OutputPath$ -d ./jni $FileClass$
然后确定
回到目录浏览,右键刚刚创建的JNISayHello.java,如此运行一遍即可在项目目录下的Jni目录找到生成的.h文件
步骤2:在VS中配置
1.打开VS新建一个动态链接库项目
2.接下来修改一些设置以便能正常编译dll
2.1打开解决方案属性,在调试界面加入命令行参数–kill-at,否则无法正常调用dll
2.2为了使目录整理,配置C/C++下的预处理器信息改为不使用预编译头
2.3在VC++界面编辑“包含目录”后面加上$(JAVA_HOME)\include;$(JAVA_HOME)\include\win32
以便编译时能找到jdk提供的jni.h jni_md.h
2.4如果要编译在64位平台上使用的dll,把此处改为x64,否则会在调用时产生异常
3.接下来把idea中生成的.h文件拷贝到头文件目录
** 注意:要使用windows文件管理器打开到jni目录,再复制文件到vs创建的项目目录下**
接下来在vs中右键”头文件”筛选器,选择”添加”->”现有项”
** 注意:如果不是从文件管理器复制粘贴会导致编译时找不到文件**
接着右键”源文件”筛选器,点击”添加项”
4.如此创建一个新的cpp文件
打开test_JNISayHello.h文件,复制这个函数声明到刚刚创建的cpp文件
**注意:记得添加形参env和cls,记得在文件头声明include**
可以在此函数中写一些代码测试
点击运行按钮进行生成dll
5.根据命令行输出找到dll文件复制到idea项目目录
右键你的项目名称然后点击粘贴