当前位置:   article > 正文

在 Android 中使用 C/C++:初学者综合指南_c++安卓

c++安卓

Java 作为一种编程语言,具有许多良好的功能,使其成为应用程序开发的首选语言。它独立于平台(因为虚拟机执行)、JIT 编译、多线程支持以及为程序员提供的富有表现力的简单语法。由于其与平台无关的特性,Java 包可以跨 CPU 架构移植,这使得库开发变得更加容易,从而增强了插件、构建工具和实用程序包的整体生态系统。

功能数量与性能之间恰好存在权衡。像汇编这样的语言具有最少的内存和执行开销,但从程序员的角度来看,其功能数量也最少。在层次结构中向上移动,C 和 C++ 等语言提供了一组良好的功能,同时保持更接近底层硬件。在它们之上的是Java和Python等语言,它们选择通过使用虚拟机来完全消除平台依赖。用这些语言编写的程序有巨大的开销,但却是开发人员的天堂。

JVM 现在可以访问共享库中公开的函数,并且操作系统根据需要执行它们。

一、为什么有人在他们的 Android 项目中需要 C/C++ 支持?

正如我们上面的讨论,在我们的系统中,性能比开发人员友好性更重要,这将我们的重点从 Java/Kotlin 转移到了“原生语言”(C/C++)。让我们通过一些示例来了解本机代码的作用及其性能改进,

  • 图形、渲染和交互:在 Jetpack Compose 等高级框架中,开发用户界面并使其看起来有吸引力似乎是小菜一碟。在像素级别,需要进行数千次计算来计算阴影的强度、闪电模式和物体的纹理。这些计算涉及大量使用线性代数结构,例如向量和矩阵及其各自的运算。处理触摸交互,包括处理移动屏幕上触摸传感器的原始坐标,以及区分单击、双击、拖动或滑动手势,也需要大量计算。这些计算可以用更接近硬件的语言更好地执行,从而可以执行额外的优化。
  • 机器学习:C/C++ 的作用很容易理解,因为 PyTorch 和 TensorFlow 等流行框架的代码库的主要部分是用 C/C++ 编写的。TensorFlow 使用用 C++ 编写的操作,并提供包装器(接口)来使用 Python 代码中的这些操作。C++ 的采用是显而易见的,作为线性代数运算的代码库,CUDA(用于并行处理)是多年前编写的,并且已经经过多年的考验。使用Python作为TensorFlow的接口之一,只是为了让C/C++的东西看起来整洁,并且对于非编程用户来说也很容易。

img

图:TensorFlow 源代码片段,显示了 arg_max 操作的实现。图片参考:作者截图自GitHub上TensorFlow官方源代码

许多此类系统在牺牲可读性和其他一些因素的情况下维护性能。接下来,我们将简短讨论指令集架构 (ISA) 以及程序执行如何随着 CPU 架构的变化而变化。

二、了解 C++ 如何集成到 Android 应用程序中

img

图 1:Android 应用程序如何使用 C++ 源代码的描述。

如上图所示,描述了 Android 中 C/C++ 代码的使用,其中存在两个独立的构建过程,一个用于 C/C++ 代码,另一个用于 Java/Kotlin 代码。在本博客中,我们将重点关注 C/C++ 代码构建过程,并了解代码如何与 JVM 通信以进行函数调用。

我们首先简要概述一下 C/C++ 和 Java 程序的编译方式,主要强调 C/C++ 编译的平台特定性。接下来,我们讨论 JNI,它充当 C/C++ 和 Java 代码之间的粘合剂。我们结束对 CMake、共享库和 ABI 的讨论,它们是构建过程的最底层组件。

正如 Reddit 用户建议的那样pjmlp,Android 不使用 JVM 在设备上运行应用程序。它有自己的运行时,ART(Android RunTime)继承了 Dalvik 及其自定义字节码 DEX。

让我们开始吧

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/887297
推荐阅读
相关标签