`

关于native

    博客分类:
  • java
阅读更多

adj.
1. 出生地的, 故乡的, 本国的
2. 当地(人)的; 原产于某地的
3. 天生的, 有天赋的
4.  土著的;土著人的
5.  原产于某地的;土产的;当地的

n.
1. 当地人, 本地人
2. 出生于某国(或某地)的人
3. (旧时欧洲人用以称呼先于白人居住在某地的人)土著
4. 本地的动物(或植物)

==========================================================

 

用native关键字修饰的方法,通俗点来说就是靠其它语言来实现的方法。一般是由C++语言通过JNI接口实。Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。通过native标注的方法,告诉虚拟机,需要委派操作系统去完成。此方法存在于DLL动态连接库中。

 

详细解释:

 

本文介绍使用native方法扩展Java程序的功能:

 

  可以将native方法比作Java程序同C程序的接口,其实现步骤:

  1、在Java中声明native()方法,然后编译;

  2、用javah产生一个.h文件;

  3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);

  4、将第三步的.cpp文件编译成动态链接库文件;

  5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。

  JAVA本地方法适用的情况

  1.为了使用底层的主机平台的某个特性,而这个特性不能通过JAVA API访问

  2.为了访问一个老的系统或者使用一个已有的库,而这个系统或这个库不是用JAVA编写的

  3.为了加快程序的性能,而将一段时间敏感的代码作为本地方法实现。

  首先写好JAVA文件


     package com.hode.hodeframework.modelupdate;   

                                                    

     public class CheckFile{                       

         public native void displayHelloWorld();   
         static {                                  
             System.loadLibrary("test");           
         }                                         
                                                   

         public static void main(String[] args){    
             new CheckFile().displayHelloWorld();  
         }                                         
    }                                              

  然后根据写好的文件编译成CLASS文件

  然后在classes或bin之类的class根目录下执行javah -jni com.hode.hodeframework.modelupdate.CheckFile,就会在根目录下得到一个com_hode_hodeframework_modelupdate_CheckFile.h的文件

  然后根据头文件的内容编写com_hode_hodeframework_modelupdate_CheckFile.c文件

 

    #include "CheckFile.h"                       
    #include                                    
    #include                                    

    JNIEXPORT void JNICALL                      

    Java_com_hode_hodeframework_modelupdate_CheckFile_displayHelloWorld(
    JNIEnv *env, jobject obj){                   
        printf("Hello world!");                  
        return;                                 
     }                                          

  

    之后编译生成DLL文件如“test.dll”,名称与System.loadLibrary("test")中的名称一致

     vc的编译方法:cl -I%java_home%include -I%java_home%includewin32

            -LD com_hode_hodeframework_modelupdate_CheckFile.c -Fetest.dll

  最后在运行时加参数-Djava.library.path=[dll存放的路径]

分享到:
评论

相关推荐

    NativeExcel 310 (d11)_SF.rar

    标题中的"NativeExcel 310 (d11)_SF.rar"表明这是一个关于NativeExcel组件的版本310,适用于Delphi开发环境的版本d11。NativeExcel是一款专为Delphi开发者设计的库,它允许程序员在应用程序中处理Excel文件,而无需...

    hadoop-2.6.0-src NativeIO.java

    出现org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z . 需要下载重新编译的NativeIO.java

    NativeExcel3.1.0FS.7z

    标题“NativeExcel3.1.0FS.7z”表明这是一个关于NativeExcel的软件库的压缩包,版本为3.1.0,FS可能代表Final Stable或者特定的特性集。这个压缩包是针对Delphi开发者的,Delphi是一种流行的面向对象的编程语言,常...

    NativeScriptVue使用NativeScript和Vue开发原生iOS和Android移动App

    在压缩包子文件的文件名“nativescript-vue-nativescript-vue-01e9d95”中,“nativescript-vue”再次强调了这是关于NativeScript和Vue结合的项目,而后面的“01e9d95”可能是一个版本号或Git提交哈希,代表了该项目...

    SNIA Standard:2020 Native NVMe-oF™ Drive Specification Version 1.0.1 - 完整英文电子版(25页).pdf

    SNIA(Storage Networking Industry Association,存储网络行业协会)发布的《Native NVMe-oF™ Drive Specification Version 1.0.1》(以下简称《规范》)是关于Native NVMe-oF™ Drive的技术标准。该标准描述了...

    React-Native关于色盘的绘制

    在React-Native应用开发中,实现色盘取色功能是一项常见的需求,特别是在涉及到用户自定义颜色设置或界面个性化设计的场景。React-Native提供了一种跨平台的方式来构建原生级别的移动应用,它允许开发者使用...

    react-ReactNative小书是一本关于ReactNative的入门向的开源书籍

    React Native是Facebook推出的一款用于构建原生移动应用的框架,它允许开发者使用JavaScript和React库来编写iOS和Android应用程序。《React Native小书》作为一本入门级别的开源书籍,旨在帮助初学者快速掌握React ...

    关于java中的native方法

    Java中的Native方法是Java语言与本地(Native)代码交互的一种机制,主要涉及到Java的JNI(Java Native Interface)技术。JNI允许Java程序调用C、C++等非Java编写的代码,反之亦然,使得Java可以充分利用本地平台的...

    NativeExcel3.1.0升级为支持DelphiXE11版本

    标题 "NativeExcel3.1.0升级为支持DelphiXE11版本" 涉及的是一个关于Delphi编程环境的库更新,具体是NativeExcel3.1.0的升级,目的是使其兼容Delphi XE11开发工具。Delphi是一款强大的面向对象的 Pascal 编程语言...

    react-native-tabbar-android

    关于`react-native-tabbar-android`的使用,首先需要安装该库,这可以通过npm(Node Package Manager)来完成。在项目根目录下运行`npm install react-native-tabbar-android`命令,然后在React Native项目中导入并...

    react-native-rtmpview

    关于RTMP协议,它是Adobe公司推出的一种实时数据传输协议,主要用于音视频的实时传输。RTMP协议能够提供低延迟的直播体验,是许多直播服务提供商首选的传输方式。通过React Native RtmpView,开发者可以利用这一特性...

    简单易用的ReactNative截屏监听系统截屏事件组件iosandroid

    通过这个组件,开发者可以构建出更加智能且用户友好的应用,比如在用户截图时自动保存至指定位置,或者弹出提示框提醒用户关于截图的规定。 总之,React Native的截屏监听组件结合了JavaScript的便利性和原生平台的...

    react native 各自控件 Demo

    "react native 各自控件 Demo" 指的是一系列关于React Native中各种组件的实际示例,通常包括按钮、文本输入、图像、列表视图等基本组件,以及更复杂的动画和手势识别组件。这些Demo可以帮助开发者更好地理解和应用...

    NativeExcel3.1.0 for Delphi XE5

    6. 许可证文件:关于库的使用权限和条件,比如开源协议或商业许可证。 使用NativeExcel 3.1.0 for Delphi XE5的开发者可以利用其提供的API来创建复杂的工作表,处理大量数据,生成报表,甚至进行数据分析。这对于...

    【移动4】王利华_H5、React+Native、Native应用对比分析+_.pdf.pdf

    标题提到的内容包含了H5、React Native以及Native应用三种类型的技术,并指出这是关于它们的对比分析。根据描述和部分内容,我们可以对这三者的技术特点、应用范围、优缺点以及实际案例进行详细分析。 首先,H5技术...

    native直接使用Parcel通信

    在这个文件中,你会看到关于如何编译和链接`testService.cpp`和`testCallback.cpp`的规则,以及生成动态库`libpaxapijni.so`的配置。这个动态库是最终加载到Android应用中的,使得Java代码能够调用其中的native方法...

    java的native关键字学习

    以下是一些关于JNI和`native`关键字的核心知识点: 1. **JNI头文件生成**:在编写Java类并声明`native`方法后,我们需要使用`javah`工具生成对应的JNI头文件。这个头文件包含了C/C++的函数原型,供我们实现本地方法...

    React Native 开发指南_中文扫描完整版

    前言 xi 第1章 初识React Native 1 1.1 React Native 的优点 2 1.2 风险和缺点 4 1.3 小结 4 第2章 React Native 工作原理 5 2.1 React Native 是如何工作的 5 2.2 渲染周期 7 ...关于封面 221

    reactnative_demo

    这个“reactnative_demo”很显然是一份关于ReactNative实战的示例代码,包含两个关键文件:`AlertSelected.js` 和 `example.js`。 `AlertSelected.js` 文件很可能是实现了一个自定义的警告对话框组件。在React...

Global site tag (gtag.js) - Google Analytics