开发阶段遇到很多坑,在此记录一下。
1.方法声明
在代码中声明一个方法,该方法在linux环境中会通过动态链接库来调用C代码。
切记!!!一定要将方法声明要加native
2.编译JAVA文件,然后通过命令行 javah -jni xxx(class文件)生成.h的JNI文件。
JNI文件中的方法,就是你在Java里定义的方法,语法为JNI的。此时你需要写对应的c代码,去实现h文件中相应的方法。
切记!!! JNI文件中声明的方法,与C代码中实现的方法,包名类名一定要完全一致!!!不然运行程序,会出异常。
3.将写好的c代码打包。
因为我的C代码中,调用了另一个C文件中的代码,所以将这两个文件一起打包。
切记!!!如果实现JNI的C代码中引用了其他文件代码,一定要将这两个C文件一起打包。
4.将打包好的SO文件放到/lib 或/usr/lib下
这两个目录一般为linux默认的动态链接库路径,这个路径可以更改。
5.调用
System.loadLibrary("ALGORITHM");
这一段代码,就是去加载动态链接库,加载你打包好的SO的包。然后实例化你声明native方法的类,然后调用方法,传参即可。
此处还有坑!!!
ALGORITHM
为打包生成so包的名,但是!!!放在动态链接库路径下的so的包,在这个名的基础之上一定还要加上一个lib.!!!