Android studio使用CMake引入第三方so库及头文件

Android studio中NDK开发(二)——使用CMake引入第三方so库及头文件

一、前言

通常来说,第三方提供的so库以及头文件都没有没有引入jni.h头文件。所以我们在导入第三方so库以及头文件的时候需要手动的将其关联到官方的native-lib库中,关联成功后就可以在native-lib中include进第三方头文件,引进头文件成功后就可以在自定义的JNI接口中对第三方头文件中内容进行调用。
 

二、准备

  • 第三方so库以及头文件
  • 创建一个默认的NDKDemo(可按照CMake构建NDKDemo这篇来构建)
  • 没有引入jni.h头文件指的是native-lib.cpp中的 “#include<jni.h>”
    在这里插入图片描述

三、步骤

(一)新增文件夹,用来存放要导入的第三方so库以及头文件

在这里插入图片描述
第三方so库:放在src/main/jniLibs/${ANDROID_ABI}(对应的CPU架构)/你的第三方so库
第三方头文件:放在src/main/cpp/include/你的第三方头文件


注意一下几点:
1)jniLibs、CPU对应的架构文件夹(如上图的armeabi-v7a)、include都是我自己创建的;

 

2)CPU对应的架构文件夹可以根据自己需要来声明,因为提供给我的第三方so库只支持armeabi-v7a,所以这里我只创建了armeabi-v7a文件夹,通常来说,如果第三方支持什么CPU架构,就创建对应的架构文件夹(armeabi-v7a、arm64-v8a、x86、x84_64),然后把对应的so库放到对应的架构文件夹中;

3)这里的第三方so库以及头文件的存放位置只是我自己的习惯,并不是一定要按我这样放,你可以定义自己的存放路径,但是这个路径你要记住,在后面配置 CMakeLists.txt 中会用到。


(二)配置CMakeLists.txt

修改CMakeLists.txt,关联第三方头文件到native-lib,配置好第三方so库以及头文件导入的路径
在这里插入图片描述
在这里插入图片描述
注意:因为涉及到公司的内部提供的so库和头文件,所以这里我分别用红字的“第三方库名称”和“第三方头文件”来代替(到时候记得自行替换为自己的so库),望谅解~


(三)配置build.gradle(app)

在这里插入图片描述
配置完以上步骤后,“build” 构建一下工程


(四)创建NDKUtil工具类(用来加载so库以及声明native方法)

在这里插入图片描述
注意:getVersion()这个方法是我根据第三方头文件中提供的接口定义的native方法,不是随便起的


(五)修改native-lib.cpp

上面声明好native方法后,接下来就是对native方法的实现,但不是自己实现,具体的实现已经打包在第三方so里面了,所以我们只需要声明JNI接口,在JNI接口中通过C/C++来调用第三方头文件中的接口即可
在这里插入图片描述
注意:这里的对native方法的实现,并不是完全自己实现相应的功能,具体的实现已经打包在第三方so里面了,我们只需要声明JNI接口,在JNI接口中通过C/C++来调用第三方头文件中的接口即可。


(六)修改MainActivity

前面的步骤都没有问题的话,接下来就只需要在MainActivity中调用自己声明好的native方法即可
在这里插入图片描述
点击“Run”一下,就可以在手机上看到效果了
在这里插入图片描述

四、总结

关键点在于:将没有实现JNI接口的第三方库以及头文件,通过在CMakeLists.txt中完成相关配置,从而关联到已实现JNI接口的native-lib.cpp中,完成第三方so库以及第三方头文件的导入

调用链:
应用层声明的native方法 —> native-lib.cpp中对应的JNI方法 —> 引入的第三方头文件中的接口 —> 第三方so库或者a库中的具体实现方法


注意:这里所说的关联到已实现JNI接口的native-lib.cpp中,重点是要引入jni.h头文件,不一定是native-lib.cpp文件,也可以在src/main/cpp下新建一个自定义的my-lib.cpp,然后把jni.h头文件引入进来,即#include<“jni.h”>,其实核心就在于把jni.h关联到第三方so库中,而官方的native-lib.cpp或者自定义的my-lib.cpp是两者连接的桥梁,这样才能通过JNI层调用到第三方so库的内容。

 

五、参考

https://blog.csdn.net/ma598214297/article/details/78387847#2.1 构建支持C%2FC%2B%2B的工程。

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值