`
assertmyself
  • 浏览: 29561 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

java native 接口开发流程

阅读更多
java native 接口开发流程

1.编写native接口
Hello.java
 
package com;

        class Hello {

             private native void print(); //定义native接口,,该方法为 对象内的,,所以执行慢
             private static native int get();
             private static native void set(int value);

             public static void main(String[] args) {

                 new Hello().print(); //非静态

                 System.out.println("--------static   return and parme----------");
                 System.out.println(get()); //静态
                 set(123);
                 System.out.println(get()); //静态

             }

             static {

                 System.loadLibrary("Hello");//加载 libHello.so

             }

         }


2.编译java源文件
在源文件目录执行 javac Hello.java

3.生成native头文件
在 classpath目录 执行命令 javah   com.Hello;生成 com_Hello.h文件

/* DO NOT EDIT THIS FILE - it is machine generated */
            #include <jni.h>
            /* Header for class com_Hello */

            #ifndef _Included_com_Hello
            #define _Included_com_Hello
            #ifdef __cplusplus
            extern "C" {
            #endif
            /*
             * Class:     com_Hello
             * Method:    print
             * Signature: ()V
             */
            JNIEXPORT void JNICALL Java_com_Hello_print
              (JNIEnv *, jobject);

            /*
             * Class:     com_Hello
             * Method:    get
             * Signature: ()I
             */
            JNIEXPORT jint JNICALL Java_com_Hello_get
              (JNIEnv *, jclass);


4.实现 .h文件
一个示例
 #include <jni.h>

        #include <stdio.h>

        #include "com_Hello.h"


        int i = 0;
        JNIEXPORT void JNICALL Java_com_Hello_print(JNIEnv *env, jobject obj)

        {

            printf("Hello World!/n");

            return;

        }



        JNIEXPORT jint JNICALL Java_com_Hello_get(JNIEnv *env, jclass jc)
        {
            return i;
        }

        JNIEXPORT void JNICALL Java_com_Hello_set(JNIEnv *env, jclass jc, jint j)

        {
            printf("set the value: sss");
            i = j;
        }


5.编译dll 或者so共享库
linux环境:.so文件 且命名为 libXXX.so
编译.o文件:gcc -fPIC -D_REENTRANT -I /usr/lib/jvm/java-1.7.0-openjdk.x86_64/include -I /usr/lib/jvm/java-1.7.0-openjdk.x86_64/include/linux -c com_Hello.c
链接.o文件 生成 so动态链接库:gcc -shared com_Hello.o -o libHello.so


window环境:.dll文件 xxx.dll
gcc -Wl,--add-stdcall-alias -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -shared -o Hello.dll com_Hello.c

如果是c++程序 需要使用g++编译指令


6.添加到path

linux :export LD_LIBRARY_PATH=.  仅当前shell有效,可以添加到path

window:直接放在 jdk bin目录下

  • so.rar (4.7 KB)
  • 下载次数: 0
分享到:
评论

相关推荐

    JNI(Java Native Interface)中文手册

    JNI(Java Native Interface)是Sun Microsystems公司定义的一套标准接口,用于实现Java代码与本地代码(通常是C或C++)之间的交互。随着Java的发展,JNI的重要性日益凸显,因为它允许Java程序调用本地库的功能,...

    java native 中的C代码

    9. **测试和调试**:在开发过程中,对JNI代码的测试和调试可能较为复杂,因为涉及到Java和C两层。可以使用Java的`System.loadLibrary`和`System.mapLibraryName`等方法来检查库加载是否成功,同时使用C/C++的调试器...

    eSDK TP V100R005C01 代码样例 01(服务端Native, JAVA)

    在eSDK TP的上下文中,Java可以作为上层应用的开发语言,通过JNI(Java Native Interface)来调用底层的Native接口,实现Java应用与硬件或操作系统更紧密的交互。 在压缩包中的文件列表中,“eSDK TP V100R005C01 ...

    微信支付源码 java网页微信支付 java网页Native微信支付源码

    微信支付是腾讯公司推出的在线支付服务,...通过分析这个Java网页Native微信支付源码,我们可以了解到微信支付的基本流程、关键接口的调用以及支付过程中涉及的安全策略,这对于理解和实现类似功能具有重要的参考价值。

    Android和ReactNative混合开发Demo

    在移动应用开发领域,Android和React Native的混合开发已经成为一种常见的技术栈选择,它结合了原生应用的优势和Web开发的便利性。本教程通过"Android和React Native混合开发Demo",将详细介绍如何在Android应用中...

    迅雷下载接口java实现

    在Java环境中调用C++接口,我们需要借助Java的JNI(Java Native Interface)技术。JNI是一种允许Java代码和其他语言写的代码进行交互的标准,它使得Java可以调用C/C++的函数,反之亦然。在本项目中,我们需要编写一...

    使用native方法实现加密解密

    JNI是Java平台的一部分,它为Java程序员提供了一个接口,可以在Java应用中调用本地(非Java)代码,反之亦然。通过JNI,我们可以利用C/C++的强大功能,如加密库,来增强Java应用的功能。 在加密解密领域,常见的...

    DELPHI 11调用JAVA 接口

    Delphi 11作为一款强大的Windows桌面应用程序开发工具,有时需要与Java环境进行交互,这通常涉及到跨语言调用接口。本篇将详细介绍如何在Delphi 11中调用Java接口,并传递参数及接收返回结果。 1. **JNI(Java ...

    react Native移动开发实战代码

    在“电商App项目案例开发”部分,学习者将接触到实际项目开发的流程,包括需求分析、设计、编码、测试和部署。这将涉及到应用架构设计,例如如何采用模块化和组件化的方法组织代码,以及如何进行代码重构以保持代码...

    Embed Java VM in Executables using Java Native Interface (JN

    Java Native Interface(JNI)是Java平台的标准组成部分,它允许Java代码和其他语言写的代码进行交互。这个技术主要用于在Java应用程序中嵌入本地代码,或者让本地代码调用Java方法。通过JNI,开发者可以利用Java的...

    大话web&native;混合开发

    ### 大话Web & Native混合开发 #### 一、引言 随着移动互联网的发展,越来越多的应用程序被开发出来,...同时,新的工具和框架也将不断出现,进一步简化混合应用的开发流程,使开发者能够更专注于创新而非技术细节。

    C++调用Java接口

    本教程将详细探讨如何使用C++通过JNI(Java Native Interface)来调用Java接口。JNI是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。下面,我们将深入讲解这个过程,并结合实际例子“CInvokJava...

    中控智慧考勤机Java二次开发Demo

    4. **API接口设计**:二次开发时,你需要定义一系列的Java API接口,以供上层应用调用,比如打卡、查询考勤记录、设置设备参数等功能。 5. **异常处理**:考虑到网络不稳定、设备故障等因素,良好的异常处理机制至...

    java扫描仪接口调用源码

    首先,Java扫描仪接口调用涉及到Java的JNI(Java Native Interface)或JNA(Java Native Access)。JNI是Java平台的标准接口,允许Java代码与其他语言写的代码进行交互,如C/C++。通过JNI,Java应用程序可以直接调用...

    java本地方法接口

    Java本地方法接口(Java Native Interface, 简称JNI)是Java平台提供的一种标准接口,允许Java代码调用本地应用程序编程接口(Native API),即非Java语言编写的函数。通过JNI,Java程序可以访问C或C++编写的代码,...

    JNI(Java Native Interface)_01

    五、JNI开发流程 1. 定义Java类,声明`native`方法。 2. 使用`javah`工具生成JNI头文件,该文件包含了Java方法在C/C++中的原型。 3. 编写C/C++代码,实现JNI头文件中声明的方法。 4. 编译C/C++代码为动态链接库...

    Java Native Interface

    Java Native Interface(JNI)是Java平台的一个重要组成部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都是必不可少的,比如当需要调用操作系统底层功能、使用硬件设备或者提升性能时。这篇博客...

    java JDK 实例开发宝典

    Java JDK实例开发宝典是一本全面深入探讨Java开发工具包(Java Development Kit)的实践指南。JDK是Java编程的基础,包含了编译器、运行环境、调试工具和其他实用工具,对于任何想要学习或精通Java编程的开发者来说...

Global site tag (gtag.js) - Google Analytics