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

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

相关推荐
杉氧1 小时前
Navigation Compose 深度实践:如何优雅地串联起你的全栈 App?
android·架构·android jetpack
雨白5 小时前
指针与数组的核心机制
android
黄林晴9 小时前
Room 3.0 正式发布!包名彻底重构,KMP 成为核心主线
android·android jetpack
三少爷的鞋10 小时前
Kotlin 协程环境下的 DCL 懒加载:别把线程时代的经验直接搬过来
android
plainGeekDev10 小时前
Gson → kotlinx.serialization
android·java·kotlin
CYY951 天前
Compose 入门篇
android·kotlin
杉氧1 天前
Compose 时代的 MVI 架构:如何用单向数据流驱动复杂 UI?
android·架构·android jetpack
杉氧1 天前
Modifier 的艺术:为什么链式调用的顺序决定了UI 的生命周期?
android·架构·android jetpack
李斯维1 天前
腾讯 XLog 日志框架 Android 端接入
android·android studio·android jetpack