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 两种拖拽 API 详解:ViewDragHelper 和 OnDragListener 的原理与区别
android
元亓亓亓2 小时前
JavaWeb--day3--Ajax&Element&路由&打包部署
android·ajax·okhttp
居然是阿宋2 小时前
Android XML属性与Jetpack Compose的对应关系(控件基础属性篇)
android
GoatJun2 小时前
Android ScrollView嵌套RecyclerView 导致RecyclerView数据展示不全问题
android
潜龙95273 小时前
第6.2节 Android Agent开发<二>
android·python·覆盖率数据
网安Ruler4 小时前
代码审计-PHP专题&原生开发&SQL注入&1day分析构造&正则搜索&语句执行监控&功能定位
android
paid槮5 小时前
MySql基础:数据类型
android·mysql·adb
用户2018792831677 小时前
AMS和app通信的小秘密
android
用户2018792831677 小时前
ThreadPoolExecutor之市场雇工的故事
android
诺诺Okami7 小时前
Android Framework-Launcher-InvariantDeviceProfile
android