Android开发 JNI-调用第三方so库

前言:

做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库的过程。

特别声明:内容总结来源网络和个人实际操作,仅记录学习,如有侵权或不对之处,还请告知,定当删除或改正!!!

相关推荐
小孔龙2 小时前
GraphicBuffer 跨进程共享
android
行业研究员3 小时前
Android内置GPS与腾讯地图定位技术对比分析
android·android定位·腾讯地图定位
Android-Flutter4 小时前
android WMS 详解(二)
android·kotlin
游戏开发爱好者84 小时前
App Store 上传 IPA 自动化,.p8 密钥认证与 CI/CD 接入实战
android·运维·ci/cd·小程序·uni-app·自动化·iphone
游戏开发爱好者86 小时前
iOS 推送怎么配置,APNs 推送证书、设备库与群发
android·ios·小程序·https·uni-app·iphone·webview
阿pin6 小时前
Android随笔-kotlin 高阶函数
android·kotlin·高阶函数
wxson728220 小时前
【Android视频监控系统技术总结】
android·音视频
hunterandroid1 天前
[Android 从零到一] LiveData 粘性事件与单次消费:从重复触发到可靠事件总线
android
hunterandroid1 天前
[Android 从零到一] Android 事件分发机制:从 ACTION_DOWN 到 View 事件消费链路
android