JNI编程

2019-01-25  本文已影响0人  nwuezr

JNI调用是指在Java代码中调用C代码,分以下几个步骤去做。

1. Java中用native关键字声明在C中实现的函数

camera.java

package cit;

public class camera {
    public native void openCamera(int index);
    public native void closeCamera();
}

2. 编译Java文件

用javac编译Java文件,-d选项指定生成class文件的目录
javac camera.java -d ../../bin

3. 生成C头文件

用javah生成C头文件,-classpath指定编译生成的class文件目录,然后指定Java的包名+类名
javah -classpath ../../bin cit.camera
运行后,在javah的执行目录生成cit_camera.h,内容如下

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class cit_camera */

#ifndef _Included_cit_camera
#define _Included_cit_camera
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     cit_camera
 * Method:    openCamera
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_cit_camera_openCamera
  (JNIEnv *, jobject, jint);

/*
 * Class:     cit_camera
 * Method:    closeCamera
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_cit_camera_closeCamera
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

4. 编写C文件并生成库文件

在C文件中实现Java_cit_camera_openCamera和Java_cit_camera_closeCamera,编译生成库文件libcitcamera.so,具体不再赘述。

5. 在Java文件中调用C函数

在Java中加载库文件,然后调用native函数即可,代码如下

public class camera {
    static {
        System.loadLibrary("citcamera");
    }
    public void fun() {
        openCamera(1);
    }
    public native void openCamera(int index);
    public native void closeCamera();
}

上一篇下一篇

猜你喜欢

热点阅读