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

相关推荐
大白要努力!14 分钟前
Android opencv使用Core.hconcat 进行图像拼接
android·opencv
天空中的野鸟1 小时前
Android音频采集
android·音视频
小白也想学C2 小时前
Android 功耗分析(底层篇)
android·功耗
曙曙学编程2 小时前
初级数据结构——树
android·java·数据结构
闲暇部落5 小时前
‌Kotlin中的?.和!!主要区别
android·开发语言·kotlin
诸神黄昏EX7 小时前
Android 分区相关介绍
android
大白要努力!8 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
Estar.Lee8 小时前
时间操作[取当前北京时间]免费API接口教程
android·网络·后端·网络协议·tcp/ip
Winston Wood8 小时前
Perfetto学习大全
android·性能优化·perfetto
Dnelic-11 小时前
【单元测试】【Android】JUnit 4 和 JUnit 5 的差异记录
android·junit·单元测试·android studio·自学笔记