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

相关推荐
智慧物业老杨2 小时前
物业日常巡查的数智化重构:从“打卡式巡检“到“闭环式风控“
android·java·人工智能·系统架构·rxjava
alexhilton8 小时前
藏在设备上的秘密,终究藏不住
android·kotlin·android jetpack
hai_android14 小时前
Kotlin / Android 常用函数使用示例手册
android·java·kotlin
hai_android15 小时前
Android MeasureSpec 详解
android·java·kotlin
又见情义16 小时前
RK3568 Android 13 本地 U 盘 OTA 升级实战:基于 RKUpdateService 的完整流程
android
Godikov18 小时前
Android10后台弹窗与APK自动更新
android
又见情义19 小时前
RK3568 Android 13 USB OTG/Host 切换调试经验分享
android
终端安全笔记20 小时前
iOS 27 之后「策略空转」:设备升级不报错,但旧策略不再管它
android·网络·安全·ios·智能手机
JMchen21 小时前
实战案例:实现120fps流畅的渐变进度条
android·kotlin·canvas
敲代码的瓦龙21 小时前
Jetpack?DataBinding!!!
android·java·开发语言·mysql·android-studio