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