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!"。

相关推荐
程序员正茂30 分钟前
Android studio中初步使用OpenCV库
android·opencv
紫_龙1 小时前
window 维护多版本Android studio
android·ide·android studio
杉氧2 小时前
KMP 自动化之路 (4):iOS 自动化构建与签名 —— 攻克最硬的骨头
android·架构·android jetpack
通玄6 小时前
Jetpack Compose 入门系列(十):Paging 3 分页加载
android
hunterandroid7 小时前
DataStore 工程化实践:迁移、并发更新与异常恢复
android·前端
程序员-珍9 小时前
报错下载android sdk失败
android·java
齊家治國平天下10 小时前
AAOS 电源管理深度解析:休眠/唤醒/功耗优化
android·车载系统·aaos·aosp·电源管理·休眠唤醒·carpowermanager
qq36219670510 小时前
安卓大版本升级后APK不兼容怎么办?2026跨版本更新指南
android
Xzaveir10 小时前
企业号码展示不可观测怎么办:状态机、拨测事件与异常回放
android·人工智能
2501_9160074710 小时前
iOS和macOS应用程序性能分析和优化工具使用综合指南
android·macos·ios·小程序·uni-app·iphone·webview