这可能是有史以来最详细的JNI入门教程

摘要: 项目要用到JNI,我又不会C和C++。网上找了不少帖子,重要的部分都是一笔带过。灰常不适合新手,我就自己摸索喽。(在此建议那些博客写的不详细的大佬,就不要写了。误人子弟,这东西不只是给自己做个记录,更多的是帮助他人。)

先理步骤:

1.编写java测试类

2.利用java测试类生成C头文件(我没有C和C++基础,后面出现的非JAVA的代码具体是C还是C++,我也不清楚。所以,教程中我都把它称为C)

3.利用C头文件编写C代码

4.生成C库

5.java调用测试

第一步:编写java测试类

代码如下:

package com.aijiao.test;

public class JNIDemo{

//定义一个方法,该方法在C中实现

public native void testHello();

public static void main(String[] args){

                  //加载C文件            

                 System.loadLibrary("TestJNI");

                 JNIDemo jniDemo =new JNIDemo();

                 jniDemo.testHello();

         }

}

第二步:利用java类生成C头文件

生成命令如下:

javah-classpath.-jnicom.aijiao.test.JNIDemo

该命令需要在java测试类的工程的bin目录下执行

下图是生成的头文件


这可能是有史以来最详细的JNI入门教程_第1张图片

第三步:用visual studio编写C代码

1.选择文件-》新建-》项目


这可能是有史以来最详细的JNI入门教程_第2张图片

2.选择(Win32),输入项目名称,项目地址,点击确定。


这可能是有史以来最详细的JNI入门教程_第3张图片

3.直接点击下一步


这可能是有史以来最详细的JNI入门教程_第4张图片

4.这里选择DLL,空项目,然后点完成。


这可能是有史以来最详细的JNI入门教程_第5张图片

5.生成如下如的项目结构


这可能是有史以来最详细的JNI入门教程_第6张图片

6.在源文件的文件夹上面右键,选择添加>>>>类。


这可能是有史以来最详细的JNI入门教程_第7张图片

7.直接点击添加


这可能是有史以来最详细的JNI入门教程_第8张图片

8.输入类名,点击完成。(C++类)


这可能是有史以来最详细的JNI入门教程_第9张图片

9.在你的JDK目录的include目录下有一个jni.h的文件,include的win32目录下有个jni_md.h文件,还有java工程的bin目录下的C头文件,一起拷贝到C工程的TestJNI目录下:(当前工程名就叫TestJNI,工程目录下还有一个TestJNI目录,工程目录-》TestJNI-》jni.h  com_aijiao_test_JNIDemo.h    jni_md.h)如下图:

当前目录为工程目录


这可能是有史以来最详细的JNI入门教程_第10张图片

拷贝过来的jni.h,com_aijiao_test_JNIDemo.h和jni_md.h


这可能是有史以来最详细的JNI入门教程_第11张图片

10.在C项目的头文件文件夹上面右键,添加>>>>现有项


这可能是有史以来最详细的JNI入门教程_第12张图片

11.选择jni.h,com_aijiao_test_JNIDemo.h和jni_md.h


这可能是有史以来最详细的JNI入门教程_第13张图片

12.打开com_aijiao_test_JNIDemo.h文件


这可能是有史以来最详细的JNI入门教程_第14张图片

13.将#include 修改为#include "jni.h",错误提示消失。


这可能是有史以来最详细的JNI入门教程_第15张图片

14.在TestJNI.cpp文件中写入如下代码:


这可能是有史以来最详细的JNI入门教程_第16张图片

代码:

#include "com_aijiao_test_JNIDemo.h"

#include

#include

JNIEXPORTvoidJNICALLJava_com_aijiao_test_JNIDemo_testHello(JNIEnv *, jobject)

{

         printf("this is C++ print");

}

15.配置C工程,在解决方案上右键,选择属性


这可能是有史以来最详细的JNI入门教程_第17张图片

16.做如下配置


这可能是有史以来最详细的JNI入门教程_第18张图片

第四步:在项目上右键生成,输出如下下信息


这可能是有史以来最详细的JNI入门教程_第19张图片

下面是生成的dll库


这可能是有史以来最详细的JNI入门教程_第20张图片

第五步:在Java项目下如下设置


这可能是有史以来最详细的JNI入门教程_第21张图片

填写dll库所在路径(不需要带文件名),保存即可。


这可能是有史以来最详细的JNI入门教程_第22张图片

运行java类,结果入下。


这可能是有史以来最详细的JNI入门教程_第23张图片

over

你可能感兴趣的:(这可能是有史以来最详细的JNI入门教程)