JNI示例

JNI(Java Native Interface)是Java平台标准版(Java SE Platform)的一部分,它允许Java代码与其他语言写的代码进行交互。下面是一个简单的JNI示例,这个示例展示了如何在Java中调用一个用C/C++编写的本地方法。

  1. 编写Java类
    首先,我们创建一个Java类,该类声明了一个本地方法。
java 复制代码
// NativeDemo.java  
public class NativeDemo {  
    // 声明本地方法  
    public native void nativeMethod();  
  
    // 加载包含本地方法实现的动态链接库  
    static {  
        System.loadLibrary("NativeImpl");  
    }  
  
    public static void main(String[] args) {  
        new NativeDemo().nativeMethod();  
    }  
}
  1. 生成JNI头文件
    接下来,我们需要使用javah工具生成JNI头文件。这个工具是JDK的一部分,可以从Java类生成C头文件和源文件。

首先,编译Java类:

powershell 复制代码
bash
javac NativeDemo.java
然后,使用javah生成头文件:

bash
javah -jni NativeDemo
这将生成一个名为NativeDemo.h的头文件。
  1. 实现本地方法
    现在,我们需要在C/C++中实现本地方法。创建一个C文件,并包含生成的头文件。
cpp 复制代码
// NativeDemo.c  
#include <jni.h>  
#include "NativeDemo.h"  
#include <stdio.h>  
  
JNIEXPORT void JNICALL Java_NativeDemo_nativeMethod(JNIEnv *env, jobject obj) {  
    printf("Hello from native code!\n");  
    return;  
}
  1. 编译和链接本地代码
    现在,我们需要编译和链接C代码以生成动态链接库。这取决于你的操作系统和编译器。以下是一个在Linux上使用GCC的示例:
powershell 复制代码
gcc -shared -fpic -o libNativeImpl.so -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux NativeDemo.c

确保将${JAVA_HOME}替换为你的Java安装目录。

  1. 运行Java程序
    最后,设置LD_LIBRARY_PATH环境变量以包含你的动态链接库,然后运行Java程序。
powershell 复制代码
export LD_LIBRARY_PATH=.  
java NativeDemo

你应该会看到输出"Hello from native code!"。

相关推荐
CCTV果冻爽1 小时前
Android 源码集成可卸载 APP
android
秋月霜风2 小时前
mariadb主从配置步骤
android·adb·mariadb
Python私教3 小时前
Python ORM 框架 SQLModel 快速入门教程
android·java·python
编程乐学4 小时前
基于Android Studio 蜜雪冰城(奶茶饮品点餐)—原创
android·gitee·android studio·大作业·安卓课设·奶茶点餐
problc5 小时前
Android中的引用类型:Weak Reference, Soft Reference, Phantom Reference 和 WeakHashMap
android
IH_LZH5 小时前
Broadcast:Android中实现组件及进程间通信
android·java·android studio·broadcast
去看全世界的云5 小时前
【Android】Handler用法及原理解析
android·java
机器之心5 小时前
o1 带火的 CoT 到底行不行?新论文引发了论战
android·人工智能
机器之心5 小时前
从架构、工艺到能效表现,全面了解 LLM 硬件加速,这篇综述就够了
android·人工智能
AntDreamer6 小时前
在实际开发中,如何根据项目需求调整 RecyclerView 的缓存策略?
android·java·缓存·面试·性能优化·kotlin