`
tivon
  • 浏览: 68070 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

JNI native

    博客分类:
  • JNI
阅读更多
JNI入门:



   本文讲述如何使用JNI技术实现HelloWorld,目的是让读者熟悉JNI的机制并编写第一个HelloWorld程序。
    Java Native Interface(JNI)是Java语言的本地编程接口,是J2SDK的一部分。在java程序中,我们可以通过JNI实现一些用java语言不便实现的功能。通常有以下几种情况我们需要使用JNI来实现。

标准的java类库没有提供你的应用程序所需要的功能,通常这些功能是平台相关的
你希望使用一些已经有的类库或者应用程序,而他们并非用java语言编写的
程序的某些部分对速度要求比较苛刻,你选择用汇编或者c语言来实现并在java语言中调用他们
    在《java核心技术》中,作者提到JNI的时候,建议不到万不得已不要使用JNI技术,一方面它需要你掌握更多的知识才可以驾驭,一方面使用了JNI你 的程序就会丧失可移植性。在本文我们跳过JNI的底层机制,读者最好先把它想象为本地代码和java代码的粘合剂。关系如下图所示:



    下面我们开始编写HelloWorld程序,由于涉及到要编写c/c++代码因此我们会在开发中使用Microsoft VC++工具。

编写java代码
我们在硬盘上建立一个hello目录作为我们的工作目录,首先我们需要编写自己的java代码,在java代码中我们会声明native方法,代码非常简单。如下所示
class HelloWorld
{
    public native void displayHelloWorld();
    static {
        System.loadLibrary("hello");
    }
   
    public static void main(String[] args) {
        new HelloWorld().displayHelloWorld();
    }
}
注 意我们的displayHelloWorld()方法的声明,它有一个关键字native,表明这个方法使用java以外的语言实现。方法不包括实现,因 为我们要用c/c++语言实现它。注意System.loadLibrary("hello")这句代码,它是在静态初始化块中定义的,系统用来装载 hello共享库,这就是我们在后面生成的hello.dll(如果在其他的操作系统可能是其他的形式,比如hello.so)
编译java代码
javac HelloWorld.java  生成HelloWorld.class文件
创建.h文件
这一步中我们要使用javah命令生成.h文件,这个文件要在后面的c/c++代码中用到,我们运行
javah HelloWorld。这样我们可以看到在相同目录下生成了一个HelloWorld.h文件,文件内容如下
在此我们不对他进行太多的解释。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     HelloWorld
* Method:    displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
  (JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
编写本地实现代码
在这部分我们要用C/C++语言实现java中定义的方法,我们在VC++中新建一个Project,然后创建一个HelloWorldImp.cpp文件,内容如下
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>

JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
    printf("Hello world!\n");
    return;
}
注意我们这里include了 jni.h和刚才得到的HelloWorld.h文件。因此你要在VC++里面设置好,jni.h在JAVA_HOME/include里面。编译通过后再生成hello.dll文件。
运行java程序
把上面生成的hello.dll文件复制到我们的工作目录,这时候我们的目录中包括HelloWorld.java,HelloWorld.class和hello.dll文件。运行java HelloWorld命令,则可在控制台看到Hello world|
的输出了。


本文来自CSDN博客,转载请标明出处:http://www.cnblogs.com/frankliiu-java/archive/2011/1/20.html
分享到:
评论

相关推荐

    多线程的JNI Native

    ### 多线程中的JNI Native函数执行 #### 概述 在Java开发中,通过JNI(Java Native Interface)可以调用C/C++等原生语言编写的代码来实现高性能的操作。当Java程序中有多个线程几乎同时进入同一个Native函数执行时...

    Android JNI native调用 java层demo TESTJNI.zip

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言写的代码进行交互,尤其是C和C++。JNI在许多场景下非常有用,例如优化性能、利用硬件特性、接入第三方库等。本文将深入...

    jni native代码

    最简版native层动态注册代码

    Android Studio3.0开发JNI流程------在Android程序中添加自己的类的native方法

    在Android应用开发中,JNI(Java Native Interface)是一种让Java代码与本地C/C++代码交互的技术。Android Studio 3.0引入了对C/C++支持的改进,使得JNI的开发更为便捷。本教程将详细讲解如何在Android Studio 3.0...

    JNI(Java Native Interface)中文手册

    ### JNI(Java Native Interface)中文手册关键知识点解析 #### 一、前言及背景 JNI(Java Native Interface)是Sun Microsystems公司定义的一套标准接口,用于实现Java代码与本地代码(通常是C或C++)之间的交互。...

    JNI(java native interface) 简体中文+英文版

    JNI(java native interface) 简体中文:do.chuan@gmail.com 翻译版 英文版:Addison.Wesley.Java.Native Interface 希望对大家有帮助...

    android架构 应用与云端软件开发

    002_Java層框架介紹.pdf 003_Event_Driven與UML狀態機....008_Java與JNI Native溝通.pdf 009_多線程的JNI Native.pdf 010_開發Android的C++核心服務.pdf 011_Button和View的客製化.pdf 012_ContentProvider客製化.pdf

    JNI详解及实例程序(英文)

    JNI(Java Native Interface)是一种机制,它允许Java程序调用C或C++程序中的函数,同时也可以让C或C++程序调用Java程序中的方法。使用JNI的主要原因包括但不限于: 1. **系统特性访问**:有些系统特性在C或C++中更...

    jni-native底层实现

    ### jni-native底层实现详解 #### 一、JNI(Java Native Interface)简介 JNI(Java Native Interface)是一种标准,用于让Java代码与其他语言编写的代码进行交互,特别是C和C++。通过JNI,开发者可以利用Java语言...

    JNI实战一:向Native层传递一个类,并从Native层返回一个类

    JNI(Java Native Interface)是Java平台的标准组成部分,它允许Java代码和其他语言写的代码进行交互。在实际开发中,我们有时需要利用C/C++等本地语言的高性能特性,或者调用已有的库,这时就会用到JNI。本篇将探讨...

    jniDemo native和java交互

    JNI(Java Native Interface)是Java平台提供的一种标准接口,它允许Java代码和其他语言写的代码进行交互。在Android开发中,JNI常被用于实现Java与C/C++代码的通信,以利用C/C++的高性能和系统级操作能力。本篇文章...

    myjni.rar_android_jni_native

    JNI(Java Native Interface)是Java平台的一个重要特性,它允许Java代码和其他语言写的代码进行交互。在Android开发中,JNI被广泛应用于优化性能敏感的代码段、调用系统底层库或者利用C/C++已有的库。这个"myjni....

    AS JNI nativce C 源码例子

    JNI(Java Native Interface)是Java平台的标准组成部分,它允许Java代码和其他语言写的代码进行交互。在Android开发中,JNI常用于提升性能、调用系统级库或者利用C/C++库来实现复杂的计算任务。本教程将围绕“AS ...

    JNI-Java Native Interface资料(精华)

    ### JNI - Java Native Interface 资料精粹 #### 引言 Java Native Interface (JNI) 是Java平台的一项强大特性,允许应用程序结合使用C、C++等其他编程语言编写的本地代码以及Java语言代码。这一功能让程序员能够...

    Android JNI 知识简介(Java Native Interface )

    #### 一、Java Native Interface (JNI) 概念与作用 Java Native Interface(JNI)是Java平台的一项重要技术,它允许Java代码与使用其他编程语言(如C、C++等)编写的代码进行交互。在Android开发中,JNI尤为重要,...

    Android应用源码串口通信(JNI)例子-IT计算机-毕业设计.zip

    JNI(Java Native Interface)是Java平台的一部分,允许Java代码和其他语言写的代码进行交互。在这个"Android应用源码串口通信(JNI)例子"中,我们将深入探讨如何在Android应用中通过JNI实现串口通信。 1. **JNI基础...

    Android Java_JNI_Native

    在深入探讨Android、Java与JNI(Java Native Interface)的交互机制之前,我们首先明确几个关键概念。Android系统底层主要基于Linux内核构建,而应用程序层则通常使用Java或Kotlin等高级语言编写。为了实现高性能的...

    jni.zip jni编译jni下载

    JNI,全称Java Native Interface,是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下非常有用,比如当需要利用已有的C或C++库,或者提升性能时,我们可以通过JNI将Java代码与本地...

    java native interface(JNI)开发全攻略

    ### Java Native Interface (JNI) 开发全攻略 #### 引言 Java Native Interface(JNI)是一种强大的技术,允许Java代码调用本地C或C++代码,反之亦然。这一功能对于那些需要高性能计算、硬件访问或是利用现有C/C++...

Global site tag (gtag.js) - Google Analytics