java和c / c++通信都可以通过jni来实现。 在java代码中:
System.loadLibrary("Hello");
Hello不能写成Hello.dll或者Hello.so,它会根据系统平台自动填充,需要注意的是在unix/linux下生成.so动态库文件的时候,
需要在Hello.so前添加lib,否则找不到.so文件(libHello.so),运行的时候需要指定.so的路径:
public class bridge{
public bridge(){};
public native String gasr(String vidioName);
public native void cutFrame(String vidioName, String r);
public static void main(String[] args)
{
try{
#这里的C++ 动态库直接库名,不用绝对路径。但是在运行时候需要制定so库的绝对路径。
# java -Djava.library.path=/homw/user/so所在目录
-jar Hello.jar
System.loadLibrary("bridge");
}catch(UnsatisfiedLinkError e){
e.printStackTrace();
}
bridge so = new bridge();
so.cutFrame("/home/vedio/build/tmp/test.mp4", "0.1");
String result = so.gasr("/home/vedio/build/tmp/test.mp4");
System.out.println(result);
}
}
可以在任意路径执行。
java c bridge.java
java -Djava.library.path=/homw/user/so所在目录 bridge