参考:https://www.cnblogs.com/moon1992/p/5260226.html
之前有一个博客写java调用jni.
java -Dlibrary.path=/***/
在调用jni的时候。遵循以下几个步骤:
public class VideoBridge{
public VideoBridge(){};
public native double gasr(String vidioName, String brTextPath, String resultPath);
public native void cutFrame(String vidioName, String r, String resultPath);
public static void main(String[] args)
{
try{
System.loadLibrary("bridge");
}catch(UnsatisfiedLinkError e){
e.printStackTrace();
}
VideoBridge so = new VideoBridge();
so.cutFrame("/audio/test.mp4", "0.1", "/result/t1");
double gasr = so.gasr("/audio/test.mp4", "br.txt", "/result/t1.txt");
System.out.println("=======================>" +gasr);
}
}
1)首先编写java类,带上包名。然后在Src下面执行。
编译生成字节码:为了等会进行java调用测试
javac com/jni/TestJNI.java
生成头文件:
javah com.jni.TestJNI
D:\workspace\workSts\NwdJni\src>cat com_niwodai_indonesia_jni_VideoBridge.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_niwodai_indonesia_jni_VideoBridge */
#ifndef _Included_com_niwodai_indonesia_jni_VideoBridge
#define _Included_com_niwodai_indonesia_jni_VideoBridge
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_niwodai_indonesia_jni_VideoBridge
* Method: gasr
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)D
*/
JNIEXPORT jdouble JNICALL Java_com_niwodai_indonesia_jni_VideoBridge_gasr
(JNIEnv *, jobject, jstring, jstring, jstring);
/*
* Class: com_niwodai_indonesia_jni_VideoBridge
* Method: cutFrame
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_com_niwodai_indonesia_jni_VideoBridge_cutFrame
(JNIEnv *, jobject, jstring, jstring, jstring);
#ifdef __cplusplus
}
#endif
#endif
按照这个h头文件,相当于java中的接口,然后用c++ 或c来引入这个头文件,进行实现。
然后编译成so,或dll 库。
在linux上
.bashrc 文件增加
export LD_LIBRARY_PATH=~/build:$LD_LIBRARY_PATH
然后就可以了。
如果jni的类发生包变化,新增native方法,修改Class类名都要重新实现