Jni 学习之路--入门尝鲜详细教程

一、入门准备

鉴于方便入门尝鲜,先准备好 visual studio(我是用2013版),eclipse。visual studio 用于编写 c 代码,生成动态 dll 文件,eclipse 用于编写调用 native 的代码。

二、编写代码

第 1 步,在 eclipse 新建一个 Java 项目,新建一个类为 Simple1.java

代码如下:

public class Simple1 {
	public static void main(String[] args) {
		// 1.2 编写程序,准备测试
		Simple1 simple1 = new Simple1();
		String nativeString = simple1.getNativeString();
		System.out.println("nativeString:" + nativeString);
	}
	
	// 1.1 编写调用的 native 方法
	public native String getNativeString();
}

此处先不用跑起项目代码,跑了也是会报错。

第 2 步,在资源管理器中找到 eclipse 的该项目目录下的 src 目录,然后在 地址栏 前面加上 “cmd ”,注意,有一个空格,目的是 cmd 命令直接 cd 到该位置。

第 3 步,编写命令生成 jni 的 .h 头文件

输入命令为

javah -d ../jni -jni com.vegen.study.Simple1

然后在 eclipse 中刷新一下项目,就会看到com_vegen_study_Simple1.h

第 4 步,在 visual studio 新建一个项目

4.1 创建后,在 jdk 安装目录搜索 “jni” 关键字,将这两个头文件复制

4.2 在 pc 中找到 vs 创建的项目目录,将 上面的 两个头文件,以及 eclipse 那个项目生成的头文件都复制粘贴到项目目录下

4.3 在头文件这里,右键添加一个新建项


4.4 将后缀改为 .c
5.编写 c 代码

com_vegen_study_Simple1.h 文件中,需注意有两点:
5.1 从 <jni.h> 改成"jni.h"
5.2 native 方法的函数声明,等待被 copy
com_vegen_study_Simple1.h 具体代码

/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"   // 5.1 从 <jni.h> 改成 "jni.h"
/* Header for class com_vegen_study_Simple1 */

#ifndef _Included_com_vegen_study_Simple1
#define _Included_com_vegen_study_Simple1
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_vegen_study_Simple1
 * Method:    getNativeString
 * Signature: ()Ljava/lang/String;
 */
// 5.2 native 方法的函数声明,此处等待被 copy
JNIEXPORT jstring JNICALL Java_com_vegen_study_Simple1_getNativeString
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

Simple.c 文件中,需注意的有四点:
5.3 引入我们的 native 方法的头文件
5.4 从 com_vegen_study_Simple1.h 的 5.2 处将函数声明 copy 过来修改
5.5 补上参数
5.6 构造一个 jstring 返回,jstring 相当于 Java 的 String
Simple1.c 具体代码

// 5.3 引入我们的 native 方法的头文件
#include "com_vegen_study_Simple1.h"

// 5.4 从 com_vegen_study_Simple1.h 的 5.2 处将函数声明 copy 过来修改
JNIEXPORT jstring JNICALL Java_com_vegen_study_Simple1_getNativeString
(JNIEnv *env, jobject jobj) {	// 5.5 补上参数
	// 5.6 构造一个 jstring 返回,jstring 相当于 Java 的 String
	return (*env)->NewStringUTF(env, "Hello,I'm native string value");
}

三、vs 生成解决方案

要生成解决方案,需要先配置好配置类型和平台

1. 配置类型的修改:调试–>StudyProject属性–>配置属性–>常规–>配置类型–>修改为 动态库(.dll)

2. 平台的修改

生成–>配置管理器–>平台–>新建一个x64平台–>选择x64平台

3.(重新)生成解决方案

已经生成了解决方案的话就重新生成解决方案,然后可以看到 dll 文件生成成功

copy 此 dll 的完整目录,回到 eclipse。

四、编写加载 dll 动态库的代码

static {
		System.load("E:/study/vsworkspace/StudyJniProject/x64/Debug/StudyJniProject.dll");
	}

Simple1.java 完整代码

package com.vegen.study;

public class Simple1 {

	public static void main(String[] args) {
		// 2.编写程序,准备测试
		Simple1 simple1 = new Simple1();
		String nativeString = simple1.getNativeString();
		System.out.println("nativeString:" + nativeString);
	}
	
	// 1.编写调用的 native 方法
	public native String getNativeString();
	
	// 3.加载 dll 动态库
	static {
		System.load("E:/study/vsworkspace/StudyJniProject/x64/Debug/StudyJniProject.dll");
	}
}

到此,已经可以完成所有的代码编写,下面运行一下看看我们的成果啦

哈哈,我的成功调用了,你的成功了吗?如果有疑问,欢迎评论交流哦~
demo 源码下载地址:https://github.com/Vegen/StudyFiles

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值