当前位置: 首页 > article >正文

深入Android架构(从线程到AIDL)_33 JNI开发与NDK 01

1、 JNI基本概念

  • 在Androd框架里,上层是Java框架,而下层是C/C++框架。这两层框架之间会有密切的沟通。此时JNI(Java Native Interface)就扮演双方沟通的接口了。
  • 藉由JNI接口,可将Java层的基类或子类的函数实作部份挖空,而移到JNI层的C函数来实作之。例如,原来在Java层有个完整的Java类:
  • 这是一个完整的Java类,其add()函数里有完整的实作(Implement)代码。如果从这Java类里移除掉add()函数里的实作代码(就如同抽象类里的抽象函数一般),而成为本地(Native)函数;然后依循JNI接口协议而以C语言来实作之。如下图所示:

         

  • 这个add()函数仍然是Java类的一部分,只是它是用C语言来实作而已。为什么要将Java类的add()函数挖空呢? 其主要的理由是: Java代码执行速度较慢,而C代码执行速度快。然而Java代码可以跨平台,而C代码与本地平台设备息息相关,所以称之为本地(Native)代码。
  • 在本地的C代码里,可以创建C++类的对象,并调用其函数。如下图:

         

       

  • 藉由JNI接口,就能让Java类与C++类互相沟通起来了。这也是Android双层框架的重要基础机制。如下图所示:
  • 从上述各图看来,只看到上层的Java函数调用中间JNI层的C函数,再往下调用C++层的函数。然而,在Android 环境里,从C/C++层函数反过来调用Java层函数,反而是更关键性的机制。
  • 所以,我们更需要关注于从C/C++层调用Java层函数的方法和技术。

         

      


http://www.kler.cn/a/506638.html

相关文章:

  • vscode 极简Linux下 cmake c++开发环境
  • ASP.NET Core - 配置系统之配置添加
  • FIDO2密码钥匙与无密码认证:打造安全便捷的数字世界
  • 建造者模式(或者称为生成器(构建器)模式)
  • Web3如何赋能元宇宙中的数字身份与隐私保护
  • 28、【OS】【Nuttx】最小系统初始化分析(4):定时器(二)
  • word合并
  • Redisson发布订阅学习
  • (蓝桥杯)二维数组前缀和典型例题——子矩阵求和
  • 深入理解 Entity、VO、QO、DTO 的区别及其在 MVC 架构中的应用
  • C# 根据name查找并返回winform菜单栏(MenuStrip)、工具栏(ToolStrip)中的子控件来修改属性
  • 3D高斯在自动驾驶中的应用
  • Oracle系列---【ORA-01017用户名密码无效】
  • 合合信息名片全能王上架原生鸿蒙应用市场,成为首批数字名片类应用
  • 深度学习电影推荐-CNN算法
  • 【深度学习地学应用|滑坡制图、变化检测、多目标域适应、感知学习、深度学习】跨域大尺度遥感影像滑坡制图方法:基于原型引导的领域感知渐进表示学习(四)
  • H3CNE-11-生成树协议STP
  • elasticsearch线程池配置
  • Profibus DP转Modbus TCP协议转换网关模块功能详解
  • 图形验证码是怎样保护登录安全的?