前言:
做Android开发的小伙伴,我们都可能对so库不陌生,特别是对接第三方的SDK,大多厂家会给我一些so库和jar包,也有一些是aar包,aar包也是包含了so库。随着接触的多了,就想着so到底是个啥玩意,什么实现都看不到,就给一个native方法,自己能不能写,如果能写,那岂不是很多不想暴露的核心方法也可以封装成so库,于是就有了上一篇JNI和JDK编程(JNI开发流程)的学习。
我以为这就结束了,有个so库和头文件,即使别人不给我jar包,我也可以自己写一个类实现,结果,突然有一天,一个家伙给我一个so库和头文件,我气势汹汹的写了个java类,折腾好久,调不通,无奈去找厂家,结果人家来了句,你用JNI编译了吗,有没有将接口映射到java层。完了,天塌了,说的啥。原来人家的so库,不是通过我学习的JNI编程得来的。于是抽空我们再学一下,如果调用第三方的so库。我们依旧利用AndroidStudio 的cMake来调试。
工程创建和前期准备工作
1、创建工程:这里我们依旧选择Native C++

我们可以得到一个这样的工程,cpp目录下,有一个.cpp文件,一个CMakeLists文件,分别如下:

Activity和我们以往写的没啥区别,调用stringFromJNI()方法,并显示;下面我们再看看.cpp中,stringFromJNI()方法如何实现。

.cpp中,直接给我们返回了一个字符串"Hello from C++",注意这里的方法申明,Java_包名_类名_方法名。
我们直接运行到设备上,看看是什么效果。

下面我们再看看CMake文件

so库的导入和头文件的导入,我们将so对应的头文件,导入到cpp目录下(可自行定义路径),在app的main目录下新建jniLibs目录,然后导入引入我们的so库,并在CMakeLists中添加我们的so库,设置so库的路径,最后将我们的so库链接到libraries中。如下图:

下一步,我们需要在我们的.cpp文件中,引入so库的头文件,实现Native方法,如下:

然后在我们的app中,就可以调用了,如下:

下面是我们调试过程中,由于CMake文件的配置,可能导致的错误:
第一种:添加了第三方库之后,没有设置路径

第二种:添加库,也设置了路径,但未连接到libraries中:

以上就是利用Androidstudio,调用第三方so库的过程。
特别声明:内容总结来源网络和个人实际操作,仅记录学习,如有侵权或不对之处,还请告知,定当删除或改正!!!