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

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

相关推荐
常利兵18 分钟前
解锁Kotlin:数据类与密封类的奇妙之旅
android·开发语言·kotlin
sunfdf1 小时前
无需密码即可解锁 Android 手机的 5 种方法
android·智能手机
Ln5x9qZC24 小时前
Laravel AI SDK 正式发布
android·人工智能·laravel
huwuhang5 小时前
跨平台电子书阅读器 | Readest最新版 安卓版+PC版全平台
android·前端·javascript
Gse0a362g6 小时前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
android·开发语言·php
十六年开源服务商6 小时前
WordPress服务器响应时间优化终极指南2026
android·运维·服务器
jwn9996 小时前
PHP vs Go:后端开发选谁更胜一筹?
android
Vfw3VsDKo7 小时前
Android设备搭建本地RTSP服务器(基于live555)
android·运维·服务器
九狼JIULANG7 小时前
【无标题】
android·flutter·开源·github
jwn9997 小时前
Laravel10.x新特性全解析
android