Android之JNI开发

JNI
JNI是Java Native Interface的缩写,俗称Java本地接口,是Java语言提供的用于Java和C/C++相互沟通的机制,Java可以通过JNI调用本地的C/C++代码,本地的C/C++的代码也可以通过JNI调用Java代码。

那什么场景下可能会用到JNI呢?
1、需要提升性能时,比如说做一些底层的开发,例如音视频处理之类的,通常都会用到JNI。
2、增加破解难度,例如需要提升代码的保护级别,需要将一些敏感信息放到底层隐藏起来。
3、需要使用到一些较为成熟的底层C/C++库时。

NDK
要在安卓上使用JNI就需要用到NDK,而NDK一系列工具的集合,它提供了一系列的工具帮助开发者快使得C/C++代码能够交叉编译生成可在安卓系统上运行的动态库库或者静态库。例如我们想要将基于C的音视频处理库FFmpeg移植到安卓平台上使用的话就需要用到NDK进行交叉编译。

动态库和静态库
1、静态库

静态库是指在链接阶段,编译器将汇编生成的.o目标文件与库文件一起链接打包到可执行文件中,或者说一起链接生成最后的可执行文件。因此对应的链接方式称为静态链接。

因为静态库是在编译期间连接库文件的,所以静态库存在着可执行文件体积较大,更新维护不方便等问题。

2、动态库

动态库又叫共享库,或动态链接库。动态库在程序编译时并不会被链接到目标代码中,而是在程序运行时才被载入,不同的应用程序如果要调用同一个库,在内存中只需要有一份该共享库即可,这样就规避了空间浪费的问题。而且动态库是在程序运行时才被载入,所以相对静态库来说动态库还具有更新、部署方便等优点。
正因为动态库的这些优点,所以目前的大多数的SDK普遍才有动态库的方式。
————————————————

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精细化管理|AIRIOT智慧货箱解决方案

物流仓储公司对货箱的管理是精细化管控的一个重要环节,力求达到货物无缝追踪的精确度、库存管理的极致优化以及作业流程的全面智能化自动,从而大幅度提升物流运营的效率和准确性。然而,传统的货箱管理模式在应对这些新兴挑战时,逐渐暴露出多重瓶颈与痛点:效率低下与数据不…

C++ STL stack容器——栈

stack容器 基本概念 stack是一种先进后出的数据结构,它只有一个出口,形式如下图所示。stack容器允许新增元素,移除元素,取得栈顶元素,但是除了最顶端外,没有任何地方可以存取stack的娶她元素。换句话说,stack不允许有遍历行为。 元素推入栈的操作称为push,将元素推出栈…

Ansible教程

1.安装ansible 在有安装python情况下: pip install ansible 或者指定版本: pip install ansible==2.7.2 没有安装python情况下: ubuntu: apt install ansible centos: yum install ansible -y 2.查看ansible版本及配置文件 ansible --version 3.修改ansible配置 cd /opt n…

Overloud Gem Bundle Complete 2024 是一套出色的音频插件

Overloud Gem Bundle Complete 2024 是一套出色的音频插件,专为专业音频工程师、音乐制作人和爱好者设计。它精确模拟了古老的模拟电路,提供了丰富、温暖和逼真的声音,适合高质量音频创作。该套件还加入了 Dopamine、ECHOSON、Mod、Modula、OTD-2 和 Sculptube 等增强功能,…

怎么理解cpu内核多核

References:cpu多核的来历,cpu性能与核心数的联系 如何理解处理器、CPU、多处理器、内核、多核? 内核/逻辑处理器/线程/多线程/多CPU/多核CPU CPU相关概念:物理cpu数、核数、逻辑cpu数,12核20线程实例分析 Multi-Core on Chip Architecture *doc - IKsingle-core vs multi-c…

Fast Rcnn

物体检测Faster Rcnn系列 目标检测概论 之前我们在机器学习了解过各种分类和回归算法目标检测需要检测物体的位置,那么把目标检测看成回归任务?好像不太合适,因为一张图像可能有多个目标 那么看做分类问题呢看成分类问题,用的是滑动窗口把图片划分为几个区域,然后一个个预…

W外链平台短链稳定不,有广告吗?

关于W外链平台的短链稳定性及是否有广告情况如下: 短链稳定性: 技术保障方面:W外链平台具备一定的技术优势来保障短链的稳定性。它拥有短网址生成核心技术,能通过算法压缩等方式生成短链并存储对应关系确保跳转;采用了高可用架构、缓存策略、安全防护等技术手段。所以…

springboot启动报错:警告Could not open windows registry node Software\JavaSoft\Prefs at root 0x80000002.

意思是无法在根目录0x80000002打开/创建prefs根节点Software\JavaSoft\Prefs且不会影响正常程序运行 解决:WIN+R regedit HKEY_LOCAL_MACHINE\Software\JavaSoft 新建项:Prefs 重新启动java项目,搞定

高智能化 智能传感器让数据采集和计算变得简单 实现自动检测和自动计算

高智能化 智能传感器让数据采集和计算变得简单 实现自动检测和自动计算智能传感器是一种具有自动检测、自动识别和自动计算功能的传感器。它将传感器相关数据(如传感器型号、量程、K值、B值、编号等)写入电子标签,并将电子标签嵌入到传感器内部。在读取传感器数据的同时,智能…

记录一个opencv的imread方法无法读取成功的问题,【设计到visual studio和静态库(lib)匹配的问题】

一、为什么会遇到这个问题 公司需要对多图进行拼接,经过多番查找发现了OpenStitching这个库。可以实现多图拼接。在python段尝试了之后感觉效果不错,所以使用Visual Studio进行C++开发。 在读取图片的时候发现imread方法无论怎么样都无法读取到图片。 解决办法 我一开始以为是…

外卖霸王餐系统如何加入运营

加入运营外卖霸王餐系统可以从以下几个方面着手: 1. **系统搭建与选择**: - **自行开发**: - **需求分析**:明确系统的功能需求,比如要支持用户注册与登录、活动展示与报名、订单管理、评价系统、返现功能等。同时确定目标用户群体,是面向学生、上班族还是其他特定人群,…

LVGL有关Linux的移植(8.2)

LVGL的移植 下载的源码总共有三个部分: LVGL源码 + LVGL Linux平台总源码框架 + LVGL驱动源码 LVGL源码下载 进入LVGL的GitHup选择要下载的版本,以下以8.2的版本为例GitHup提供多种下载方式,我们以压缩包的形式下载下载arm Linux开发板fb0的源码主框架 LVGL 配置为使用标准 …