JNI(JavaNative Interface)Java本地接口,是Java提供给程序员用Java语言调用本地语言(C、C++)写的函数的一种方法。
下面简单的说一下怎样写第一个JNI程序。
package jni.hello;
/**
* 第一个JNI程序
* @author zyb
* @version 创建时间:2012-4-2 下午3:55:33
*/
public class HelloWorld {
static {
System.loadLibrary("HelloWorld"); // 加载动态链接库,不能加后缀
}
public native void hello(); // 本地方法声明
public static void main(String[] args) {
new HelloWorld().hello();
}
}
生成C或C++的头文件
![图片](http://b92.photo.store.qq.com/psb?/8344a1f6-b54d-481d-b694-ee1f6fca2e76/ioVfaPZHOyuEC0rksliwBwM4x4o*x58zfrceg53XWqQ!/b/YYOf1zYbmgAAYrPS4zblmgAA)
用Visual Stadio新建一个Win32项目
![图片](http://b95.photo.store.qq.com/psb?/8344a1f6-b54d-481d-b694-ee1f6fca2e76/F8tqwFwR*d5XS3eR7PDdeteV*DoFO1LIXaXy2h.NnNU!/b/YWj1pTivWAAAYhO7szg8WAAA)
![图片](http://b101.photo.store.qq.com/psb?/8344a1f6-b54d-481d-b694-ee1f6fca2e76/5L*5.RNjXs0n.fTmxaKTbXFl8O6MtHxRNKGNkUBXM7A!/b/YTMhQTyAIAAAYuWNPDzsIAAA)
![图片](http://b97.photo.store.qq.com/psb?/8344a1f6-b54d-481d-b694-ee1f6fca2e76/UEgSUNTKZGOhwYEY1LGtpgIO57rXKfcT32GLzGHXEC8!/b/YS6c0jksQQAAYtce1Dm6QQAA)
将刚才生成的头文件放到项目中
![图片](http://b91.photo.store.qq.com/psb?/8344a1f6-b54d-481d-b694-ee1f6fca2e76/qjjyaEB87huzo7gc.Q98w4QOOEWYdbRsuAcLbbwaHIE!/b/YZZOTjZImgAAYsBZUTbmmwAA)
在HelloWorld.cpp中加入如下代码:
#include "stdafx.h"
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL Java_jni_hello_HelloWorld_hello(JNIEnv *env, jobject object)
{
printf("Hello JNI!");
}
设置VC的环境
工具-选项-项目和解决方案
加入最后两个包含文件。
![图片](http://b101.photo.store.qq.com/psb?/8344a1f6-b54d-481d-b694-ee1f6fca2e76/caZhzi0h3O9GBuPm.SW86j2y2rBcoH0STY6dhYwNnDw!/b/YawvRDzfIAAAYne6RTxFIQAA)
按F7生成DLL文件,然后将生成的DLL文件复制到Java项目的bin目录下,运行
![图片](http://b92.photo.store.qq.com/psb?/8344a1f6-b54d-481d-b694-ee1f6fca2e76/5Xxwh4YjxR3070ofZW9DzERINMBOgx2DPy2kBWZbyoI!/b/YTTV4zbQmgAAYkFC3zZhmwAA)
调用C的函数成功了。哈哈, 是不是很有意思呢。。。
分享到:
相关推荐
创建一个JNI程序通常涉及以下几个步骤: 1. **设置开发环境**:首先你需要安装Java Development Kit (JDK) 和 C/C++ 编译器,如GCC。确保你的系统路径包含了JDK的bin目录,这样可以使用javah工具生成C/C++的头文件...
在这个"第一个JNI实例学习"中,我们将探讨如何创建并运行一个基本的JNI程序。 首先,我们需要理解JNI的核心概念。JNI提供了一套接口,让Java代码能够声明本地方法,这些方法在运行时由本地(非Java)代码实现。本地...
本教程将带你一步步了解如何在Android上创建并运行你的第一个JNI程序。 首先,你需要安装Android NDK(Native Development Kit)。NDK是一组工具,它提供了编写原生代码(C/C++)的能力,并将其与Android应用程序...
通过以上步骤,你已经成功地编写并运行了一个基本的JNI程序。然而,实际应用中,JNI的使用可能会涉及到更复杂的类型转换、异常处理以及多线程问题。理解并熟练运用JNI,对于开发高效、跨平台的Java应用程序至关重要...
这篇博客将引导我们完成在Ubuntu环境下创建并运行一个简单的JNI示例。 首先,我们需要了解JNI的基本概念。JNI接口提供了Java虚拟机(JVM)与本地代码之间的桥梁。当Java程序需要执行一些只能由原生代码完成的任务时...
以《Android内核源代码情景分析》第二章的freg实例为例,freg是一个简单的设备驱动程序,展示了如何在用户空间调用驱动程序。在Android应用程序中,我们可以使用JNI来调用这个驱动,实现读写操作或者其他特定功能。 ...
本篇文章将引导初学者如何搭建Android NDK开发环境以及创建并调用第一个JNI程序。 **一、NDK环境搭建** 首先确保你已经安装了Android Studio。在Android Studio中搭建NDK环境非常简单。按照以下步骤操作: 1. ...
#### 三、编写第一个JNI程序 接下来,我们将通过编写一个简单的JNI程序来演示如何将Java与C/C++代码相结合。 ##### 1. 设计JNI接口 - **创建工程**: 在`android-ndk-1.6_r1/apps/firstJNI/project`目录下创建一...
#### 五、编写第一个 JNI 程序 1. **设计 JNI 接口** - 创建 Android 工程,并指定项目目录。 - 编写 Java 类 `Jni`,定义需要通过 JNI 调用的本地方法。 - 使用 `javah` 命令生成相应的 `.h` 头文件。 2. **...
总结起来,JNI的第一、二讲主要涵盖了以下几个知识点: 1. JNI的概念和工作原理。 2. 如何声明和调用本地方法。 3. 使用`javah`生成C/C++头文件。 4. 编写C/C++代码实现本地方法。 5. 参数和返回值的传递,以及异常...
以下是一个简单的示例,演示如何使用JNI来创建一个具有两个原生方法的Java程序,这两个方法执行简单的输出操作。 ### 总结 JNI为Java开发者提供了一种与C/C++代码交互的有效途径,这不仅可以提高程序性能,还能...
在本教程中,我们将利用Eclipse IDE和Microsoft Visual Studio 2013(VS2010)来创建一个简单的JNI示例,展示如何从Java程序调用本地C代码并生成一个动态链接库(DLL)。 1. **JNI基础知识**: - JNI是Java平台的...
1. **设置项目结构**:确保你的项目包含一个`jniLibs`目录,它是放置.so库文件的地方。在这个例子中,"hello-libs"可能包含了对应不同CPU架构的.so文件,如armeabi-v7a、arm64-v8a、x86和x86_64等。 2. **创建JNI...
1. **入门教程**:第二章通过一个简单的示例,向初次接触JNI的读者介绍其基本概念和工作原理。这部分内容适合对JNI不熟悉的初学者,帮助他们快速理解和掌握JNI的基本用法。 2. **全面介绍**:第三至第十章系统地...
第一本书籍“05134745605.pdf”可能详细介绍了JNI的基础概念,包括如何在Java代码中声明本地方法,创建头文件,编写C/C++代码实现这些方法,并通过Java虚拟机(JVM)加载动态链接库。书中可能还涵盖了JNI的各种数据...
// 实现第一个JNI方法的逻辑 } void Java_MainActivity_secondJniCall(JNIEnv *env, jobject thiz) { // 实现第二个JNI方法的逻辑 } ``` 4. **编译和链接**:将C/C++源文件编译为.so库,通常通过Android NDK...
1. **第二章:JNI入门** – 针对初次接触JNI的读者,通过一个简单的示例介绍JNI的基础用法。 2. **第三至第十章:深入JNI** – 对JNI的各种特性进行系统性的介绍,包括详细的示例和解释。 3. **第十一至第十三章:...
在 jni 文件夹下,我们可以创建一个与头文件对应的 cpp 文件,例如 com_wwj_jni_TestJNI.cpp。在这个文件中,我们可以实现三个 native 方法的逻辑。 例如,我们可以在 Add.h 和 Add.cpp 文件中实现 Add 方法的逻辑...
总的来说,这个实例是一个宝贵的教育资源,它展示了如何利用JNI将Java应用程序与C++编写的第三方DLL集成。通过学习和实践这个实例,开发者可以增强其在Java应用中嵌入本地代码的能力,从而充分利用两者的优点。