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 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
冬木家居3 小时前
40㎡客厅变形记,小家住出大自由[特殊字符]
android·经验分享·笔记·智能家居·微信公众平台
AFinalStone4 小时前
Android 7系统无障碍服务(六)输入事件拦截与 TouchExplorer
android·无障碍服务
天空之城--4 小时前
MT管理器Android逆向工程完全指南:从入门到实战
android
Anhty5 小时前
2026九月最新变声器测评:iOS安卓双端适配,低延迟运行更稳定
android·人工智能·功能测试·ios·智能手机
渡我白衣7 小时前
并查集:基础认识与模拟实现
android·java·javascript·数据结构·c++·算法·并查集
Android-Flutter8 小时前
flutter GetX 详解
android·flutter
MyFreeIT10 小时前
Android Manual
android
hai_android11 小时前
AIDL 实现 IPC 进程间通信
android·android studio
AFinalStone12 小时前
Android 7系统无障碍服务(五)AccessibilityNodeInfo 的构建与查询
android·无障碍服务