JNI编程

作者: nwuezr | 来源:发表于2019-01-25 16:11 被阅读0次

    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();
    }
    
    

    相关文章

      网友评论

          本文标题:JNI编程

          本文链接:https://www.haomeiwen.com/subject/gqimjqtx.html