java中的jni 例子HelloWorld
准备过程:
1. 创建一个类(HelloWorld.java)
2. 使用javac编译该类 HelloWorld.class
3. 利用javah -jni产生头文件 HelloWorld.h
4. 用本地代码实现头文件中定义的方法 HelloWorld.c
5. 编译c文件 HelloWorld.so 或者 HelloWorld.dll
6. 运行
HelloWorld.java
public class HelloWorld {
public native void print(); //声明本地方法
public static void main(String[] args) {
new HelloWorld().print();
}
static{
System.loadLibrary("HelloWorld"); // 加载库文件
}
}
javac 编译HelloWorld文件
javac HelloWorld.java
创建头文件 进入到工程的bin目录下
javah -jni HelloWorld
javah jni.sample.HelloWorld
"-jni"为默认参数,可有可无.
关键代码如下:
/*
* Class: jni_sample_HelloWorld
* Method: print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_jni_sample_HelloWorld_print
(JNIEnv *, jobject);
JNIEnv 是 JNI 核心数据之一,地位非常崇高,所有对 JNI 的调用都要通过此结构。
实现头文件:
HelloWorld.c文件
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
// printf 在stdio.h头文件中
JNIEXPORT void JNICALL Java_jni_sample_HelloWorld_print(JNIEnv* env,jobject thiz)
{
printf("Hello World!\n");
return;
}
在工程的bin目录下
gcc -dynamiclib -o libhelloworld.so HelloWorld.c -framework JavaVM -I/System/Library/Frameworks/JavaVM.framework/Headers
编译C++代码的时候在MacOS下和在Linux, Windows有所不同, 不是编译成.so或者dll, 而是MacOS自己的jnilib. 并且jni.h的目录也比较特殊, 是/System/Library/Frameworks/JavaVM.framework/Headers/, 这个需要稍微注意一下
windows下
cl -Ic:\java\include -Ic:\java\include\win32 -MD -LD HelloWorld.c
-FeHelloWorld.dll
1) 在/Users下建立一个用来存放.so库文件的目录,比如/Users/zhaoshun/solibs
2) 把libhelloworld.so文件拷贝到该目录下
3)打开Terminal,运行如下命令
export LD_LIBRARY_PATH=/Users/zhaoshun/solibs
只在当前shell下有效...
也可以用绝对路径
System.load("/Users/zhaoshun/solibs/libhelloworld.so");
分享到:
相关推荐
### Java与JNI结合获取系统进程信息的实现 #### 概述 在《Java_JNI_获得系统进程信息实例.doc》中,我们探索了一个利用Java Native Interface (JNI)来获取操作系统进程信息的示例项目。该项目由三个主要部分组成:`...
在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都非常有用,比如优化性能、使用现有的C/C++库、或者像在这个“JniCallback.zip”文件...
《Android JNI串口通信实践详解》 在移动设备开发领域,Android系统因其开源特性与丰富的功能,成为开发者们的首选平台。然而,对于某些特定的硬件交互,如串口通信(RS232),原生Java API往往无法满足需求,这时...
### Java JNI 编程进阶知识点详解 #### 一、JNI技术概述 JNI(Java Native Interface,Java本地接口)是一种框架,它允许Java代码与其他语言(如C、C++)编写的代码进行交互。这种交互能力对于提升Java应用程序的...
LTP4J的核心在于其提供的静态库(parser_jni.lib)和动态库(如parser_jni.dll),这些库文件是C++编写的底层实现,通过JNI(Java Native Interface)技术与Java代码进行交互。JNI允许Java代码直接调用C/C++的函数,...
在JNI详解与实现的PDF文档中,可能会涵盖以下几个主要知识点: 1. **JNI基础知识**:介绍JNI的概念,它的历史,以及为何需要使用JNI。这通常包括Java平台的结构,如何在Java中创建本地方法,以及JNI头文件和库的...
《Android NDK与JNI开发详解:从Hello-JNI入门》 Android系统以其开源性和灵活性吸引了大量的开发者,而JNI(Java Native Interface)则是Android平台中连接Java层与原生C/C++代码的重要桥梁。JNI允许开发者在...
Java调用JNI详解 Java Native Interface(JNI)是Java虚拟机(JVM)与native代码之间的接口,允许Java程序调用native代码,反之亦然。本文将详细介绍如何使用Java的JNI调用C++的DLL包。 JNI的作用 JNI的主要作用...
### Android深入研究JNI详解 #### 一、JNI与Android中的.so库载入 在深入了解JNI(Java Native Interface)之前,我们需要明确一点:Android应用程序的主要部分是基于Java开发的,并且这些Java类会被编译成Dex格式...
《Android NDK与JNI开发详解:HelloNDK实践》 Android Native Development Kit(NDK)是Google提供的一款工具集,允许开发者在Android平台上使用C/C++编写原生代码,从而提高应用程序的性能和效率。JNI(Java ...
`libusb`是一个开源的C库,用于跨平台的USB编程,而JNI(Java Native Interface)则是Java平台的一部分,用于连接Java代码与本地(非Java)代码,如C或C++。将`libusb`与JNI结合,开发者可以编写Java应用,同时利用`...
【JNI技术详解】 JNI(Java Native Interface)是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在Android开发中扮演着重要的角色,尤其是当开发者需要利用C/C++库或者提高性能时。本教程将围绕...
《Android平台上的JNI与avilib库的整合应用详解》 在Android开发中,JNI(Java Native Interface)是一种关键的技术,它允许Java代码与其他语言(如C++)进行交互,为高性能计算、系统调用或者利用已有的C/C++库...
#### 三、JNI的工作流程详解 根据给定的文件内容,我们可以深入探讨一个简单的JNI示例,该示例展示了如何创建一个Java类,以及如何使用JNI调用C语言编写的函数。 1. **创建Java类** ```java package cn; public ...
Android 深入研究 JNI 详解 JNI(Java Native Interface)是 Java 平台的一部分,允许 Java 代码和其他语言编写的代码进行交互。JNI 是本地编程接口,使得在 Java 虚拟机(VM)内部运行的 Java 代码能够与用其他...
5本JNI资料,非常详细; 1.android_jni操作指南.pdf 2.JNI设计实践之路.pdf 3.jni详解.pdf 4.Java_JNI_编程进阶.pdf 5.Android_JNI总结.doc
### 有关Java JNI详解 #### 一、JNI概述与重要性 Java Native Interface(JNI)是一种重要的技术,它允许Java代码与其他语言(主要是C和C++)编写的代码进行交互。这种交互能力使得开发者能够在利用Java平台的强大...
### JNI详解:深入理解Java Native Interface #### 一、引言与翻译初衷 JNI(Java Native Interface)作为连接Java世界与本地C/C++世界的桥梁,其重要性不容小觑。本文旨在详细介绍Android环境下JNI的使用,帮助...
### Android JNI 操作指南知识点详解 #### 一、概述 JNI (Java Native Interface) 是 Java 平台标准的一部分,它允许 Java 代码和其他语言写的代码进行交互。在 Android 开发中,通过 NDK (Native Development Kit)...