我是靠谱客的博主 诚心草莓,最近开发中收集的这篇文章主要介绍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

最后

以上就是诚心草莓为你收集整理的Jni 学习之路--入门尝鲜详细教程的全部内容,希望文章能够帮你解决Jni 学习之路--入门尝鲜详细教程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(29)

评论列表共有 0 条评论

立即
投稿
返回
顶部