在一些项目中,有可能会看到项目使用或者依赖到so文件,那么so文件是什么呢?
so文件是unix的动态链接库,是二进制文件,作用相当于windows下的.dll文件。在安卓项目中,调用动态库文件(*.so)都是通过jni的方式,加载so文件提供的api。
在我所碰到的项目中,一般都是使用第三方硬件交互的场景用得到so文件,当然也有其他场景用的到的,只是我暂时还没有接触到的。这里着重介绍一下简单的使用so文件的方法。
使用步骤:
1、先将第三方硬件商提供的so文件全部拷贝到安卓项目中的libs文件下。
2、将硬件商提供的一些写好的api文件放入到原包名的文件下,如果没有原包名,就自己创建一个,检查api文件中是否有System,loadLibrary("XXXX"),没有的话就需要加上,一般可以添加在api里,也可以在mainactivity中
。
3、加入权限
4、在build.gradle文件中android的{}中,加入
task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") { destinationDir file("$projectDir/libs") baseName "Native_Libs2" extension "jar" from fileTree(dir: "libs", include: "**/*.so") into "lib" } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn(nativeLibsToJar) }
5、编译项目,编译好了之后,在libs下面文件下面就会多出一个jar文件。这个时候就编译成功了,剩下的就可以开始使用api中的方法了。
在整个使用过程中,要比较注意so文件是放在libs下面,api的文件需要跟原包名一样的,因为在so文件里面编译的,就已经把原包名编译进去了。换了包名的话api就调用不到so文件里面的方法了。
结束语:以上操作都是我自己操作过的,不过只是适用初学者,有些什么问题的话,请联系我更正,谢谢了