Android Studio引入JNI第三方库

news2024/10/2 16:22:40

一、前言

JNI作为Java与native沟通的桥梁,项目开发中难免要使用到;而我们除了自己开发JNI之外,有时候还要在Android Studio引入别人开源的C++第三方库,并在jni层实现第三方库的调用。

二、流程

1.导入头文件和实现文件

将第三方库下载下来之后可以得到一个这种样子的文件夹fmodstudioapi11009android找到api下面的lowlevel就是android平台的相关资源:

  • examples 例子
  • inc 头文件
  • lib 执行文件(so文件)

在这里插入图片描述

将inc复制到cpp文件夹下:
在这里插入图片描述

这就完成了头文件的导入,光导入头文件是无法实现功能的,因为头文件只是做函数的声明,所以还要导入实现文件,so文件。

2.导入so文件

将so文件导入到jniLibs文件夹下:
在这里插入图片描述

3.导入jar

最后还要导入以下jar包资源,先将jar包复制到libs文件夹下,再导入。
在这里插入图片描述

implementation files('libs\\fmod.jar')
4.CMakeLists.txt配置

导入了资源要将资源配置到CMakeLists.txt文件才能进行使用。

导入头文件:

include_directories("inc")

批量导入.c .h .cpp文件:

#批量查询到.c .h .cpp文件
file(GLOB allCpp *.c *.h *.cpp *.hpp)

add_library( # Sets the name of the library.
        qq_sounddemo

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        ${allCpp})//将这些文件导入到qq_sounddemo里面去

设置库文件路径,就是要链接到的so文件路径:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/../jniLibs/${CMAKE_ANDROID_ARCH_ABI}")

链接具体的库到qq_sounddemo.so里面去,不然使用会报错:找不到对应的库:

target_link_libraries( # Specifies the target library.
        qq_sounddemo

        # Links the target library to the log library
        # included in the NDK.
        ${log-lib}
        fmod
        fmodL
 )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/369774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux内核进程地址空间与进程内存布局

一,进程空间分布概述 对于一个进程,其空间分布如下图所示: 程序段(Text):程序代码在内存中的映射,存放函数体的二进制代码。初始化过的数据(Data):在程序运行初已经对变量进行初始化的数据。未初始化过的数据(BSS):在程序运行初未…

九龙证券|券商春季策略扎堆来袭 风格切换成焦点

2月以来,国泰君安、中信建投、国金证券等10余家券商组织相继发布2023年春季战略。综合来看,组织对A股持达观预期,未来两三个月A股商场或迎来重要切换。风格上,“中心财物,生长接力”或许成为上半年装备主线&#xff0c…

java 系列之Mybatis

java 系列文章 文章目录java 系列文章前言一、Mybatis 入门1.1 认识 框架(了解)1.2 认识 ORM(要知道)1.3 认识 Mybatis(要知道)二、Mybatis 使用2.1 创建maven项目并导入依赖2.2 准备数据库,包和…

释放内存流程

你好,我是安然无虞。 thread cache回收内存 当从 thread cache 中申请的内存对象使用完毕需要还回来的时候, 只需要计算出该内存对象对应 thread cache 中的哪一个自由链表桶, 然后将该内存对象插入进去即可. 不过需要注意的是, 如果不断有内存对象释放回来, 那么…

Java实现根据拼音首字母的排序

1.项目 手机APP端要对企业列表按企业名称首字母(如果企业名是英文的就按)进行分类排序,效果如下: 2.实现过程 2.1 首先引入项目的pinyin4j-2.5.0.jar包。 这个jar的下载地址如下: 链接:https://pan.baidu.com/s/1hkP_gGAYcgzyK_D…

跨链桥:Web3黑客必争之地

跨链桥,区块链的基础设施之一,所实现的功能是允许用户将自己的资产从一条链转移至另外一条链上,是连接不同的区块链的关键桥梁,常使用中心化的方式进行实现。由于跨链桥自身往往存储有用户所质押的巨额资产,是Web3黑客…

KUKA KR C4机器人与S7-1200PLC进行PROFINET通信的具体方法和步骤

KUKA KR C4机器人与S7-1200PLC进行PROFINET通信的具体方法和步骤 首先,从KUKA机器人控制柜中将KOP备选软件包拷贝出来,然后在“WorkVisual Development Environment”安装KUKA备选软件包(版本非常重要,尽量从控制柜中拷贝), 也可以从以下链接中获取: KUKA机器人PROFINET…

php 任务调度

在日常开发中,我们总会遇到一些在某个指定的时刻去执行,或是每隔xx时间执行,或是需要一直在后台监听的任务执行。基于这个需求,对于php我找了一些办法来实现这些功能 1、依赖于laravel的任务调度。 每隔xx时间执行一次命令&#…

七、虚拟机栈

虚拟机栈出现的背景 1.由于跨平台性的设计,Java的指令都是根据栈来设计的,不同平台CPU架构不同,所以不能设计为基于寄存器的。 2.优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同…

XC7K70T-1FBG676I【FPGA】XC3S200-4FTG256C参数XC7K70T-2FBG676C

Kintex-7 FPGA为快速增长应用和无线通信提供最优性价比和低功耗。Kintex-7 FPGA允许设计人员构建卓越带宽和12位数字可编程模拟,同时满足成本和功耗要求。Kintex-7内置支持8通道PCI Express (Gen1/Gen2),用于连接主机系统。7系列器件利用Xilinx统一架构保…

如何实现外网跨网远程控制内网计算机?快解析来解决

远程控制,是指管理人员在异地通过计算机网络异地拨号或双方都接入Internet等手段,连通需被控制的计算机,将被控计算机的桌面环境显示到自己的计算机上,通过本地计算机对远方计算机进行配置、软件安装程序、修改等工作。通俗来讲&a…

超图软件许可过期后的处理

超图软件许可过期,博主犯了一个很低级的错误,特此发帖记录一下。 按照官网的介绍,直接申请新的许可,配置本地许可很简单的。 1.打开桌面软件会弹出以下的框。 2.配置本地许可对话框 3.切换到激活更新页面 4.选择激活文件即可 以…

内容团队如何快速出稿

对于内容团队而言,每个内容选题就相当于一个小项目,它们并非简单的线性工作流,相反其复杂程度不亚于一个小型工厂。一个内容选题会涉及内容形式,选题类型等多个变量,这些变量因素组合起来就是十几种不同类型的工作流。…

我花6个月从0开始面上大厂自动化测试岗,拿个20K不过分吧?

我是着急忙慌的准备简历——3年软件测试经验,可独立测试大型产品项目,熟悉项目测试流程...薪资要求? 3年测试经验起码能要个20K吧?” 我一个朋友跟我说: “我加班肝了一页半简历,投出去一周,…

03--框架基础

1、目录结构1)创建项目使用测试号或小程序申请成功之后的appid即可,注意这里选择“不使用云服务”,选择javascript模板工具结构如图目录结构小程序包含一个描述整体程序的 app 和多个描述各自页面的 page。一个小程序主体部分由三个文件组成&…

python自学之《21天学通Python》(13)——第16章 数据库编程

数据库指的是以一定方式存储在一起、能为多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。而我们平时所说的数据库实际上是包含了数据库管理系统(DBMS)的,数据库管理系统是为管理数据库而设计的软件系统,它一…

jvm调优参数配置

在JVM启动参数中,可以设置跟内存、垃圾回收相关的一些参数设置,默认情况不做任何设置JVM会工作的很好,但对一些配置很好的Server和具体的应用必须仔细调优才能获得最佳性能。通过设置我们希望达到一些目标: GC的时间足够的小 GC的…

Homekit智能家居DIY一WIFI智能插座

WiFi智能插座对于新手接触智能家居产品更加友好,不需要额外购买网关设备 很多智能小配件也给我们得生活带来极大的便捷,智能插座就是其中之一,比如外出忘记关空调,可以拿起手机远程关闭。 简单说就是:插座可以连接wi…

如何外网登录管理云通信短信网关平台?——快解析映射方案

云通信(Cloud Communications )是基于云计算商业模式应用的通信平台服务,简单易用,满足企业一键群发场景,支持多种语言SDK和API 接入。各个通信平台软件都集中在云端,且互通兼容,用户只要登录云通信平台,不…

【玩家心得】Smurf Society 游戏攻略

在深林的深处,生活着一群无忧无虑、快乐的小精灵,浑身蓝色,叫做蓝精灵。蓝精灵住在自己村子里蘑菇屋里,精灵爸爸、精灵妹妹、笨笨、乐乐等使得精灵村每天都欢声笑语。可是,在森林深处的城堡里住着一个邪恶的巫师格格巫…