NDK是什么?有什么用?需要掌握什么技术栈?

文章目录

  • NDK
    • 使用NDK的优点
    • 使用NDK需要掌握的知识
      • C/C++的编译原理
      • C/C++基本语法和编写能力
      • 原生共享库:
      • 原生静态库:
      • Java 原生接口 (JNI):
      • 应用二进制接口 (ABI):
  • CMake
  • LLDB
  • 参考

NDK

NDK(Native Development Kit,本地开发工具包)是一组工具,用于帮助开发人员通过使用 C/C++ 代码在 Android 平台上开发和编译本地应用程序。NDK 使开发人员能够使用原生代码实现高性能、低延迟、CPU 密集型的操作或处理器密集型应用程序,如游戏引擎、音频处理器、图形渲染器、物理引擎等。

使用 NDK,开发人员可以在 Java 和 C/C++ 之间轻松地进行交互,并能够访问底层系统资源,如内存、文件系统等。此外,NDK 还提供了许多实用工具,如交叉编译器、库生成器等,帮助开发人员简化开发流程。

可以 Android Studio 中使用 NDK 将 C 和 C++ 代码编译到原生库中,然后使用 Android Studio 的集成构建系统 Gradle 将原生库打包到 APK 中。

需要注意的是,虽然使用 NDK 可以为应用程序带来更好的性能和更高的灵活性,但同时也增加了应用程序的开发和维护成本。因此,在使用 NDK 进行开发之前,开发人员应该仔细评估是否真正需要使用原生代码,并确保在使用 NDK 时遵循最佳实践和安全规范。

使用NDK的优点

Android NDK 是一组使您能将 C 或 C++(“原生代码”)嵌入到 Android 应用中的工具。能够在 Android 应用中使用原生代码对于想执行以下一项或多项操作的开发者特别有用:

  • 在平台之间移植其应用。
  • 重复使用现有库,或者提供其自己的库供重复使用。
  • 在特定情况下提高性能,特别是像游戏这种计算密集型应用。

使用NDK需要掌握的知识

C/C++的编译原理

编译链接代码的过程中,会遇到很多跟编译链接的问题。不了解相关原理会让你在编译错误的时候没有对应的概念去排查原因。

C/C++基本语法和编写能力

有时候,拿到C/C++的代码会有各种各样的问题,例如代码是针对32系统编写的,我们要移植到64位系统运行可能就会出问题。反之也是,这种时候我们需要具备看懂源代码并做对应的修改的能力。

原生共享库:

NDK 从 C/C++ 源代码构建这些库或 .so 文件。

原生静态库:

NDK 也可构建静态库或 .a 文件,而您可将静态库关联到其他库。

Java 原生接口 (JNI):

JNI 是 Java 和 C++ 组件用于相互通信的接口。这是掌握NDK必不可少的技术栈。

应用二进制接口 (ABI):

ABI 可以非常精确地定义应用的机器代码在运行时应该如何与系统交互。NDK 根据这些定义构建 .so 文件。不同的 ABI 对应不同的架构:NDK 为 32 位 ARM、AArch64、x86 及 x86-64 提供 ABI 支持。
需要理解这些不同架构的特性,才能做好不同机型适配的工作。

CMake

Android Studio 编译原生库的默认构建工具是 CMake。由于很多现有项目都使用 ndk-build 构建工具包,因此 Android Studio 也支持 ndk-build。不过,如果您要创建新的原生库,则应使用 CMake。
很灵活和强大的构建工具,需要掌握CMake的使用,才能根据不同的源代码环境对代码进行正确的构建。

LLDB

LLDB:Android Studio 用于调试原生代码的调试程序。
LLDB是一个高性能的调试器,它可以用于调试多种平台和语言,包括C / C ++,Objective-C,Swift和Assembly。在Android Studio中,LLDB是默认的原生代码调试器。它允许开发人员在调试过程中执行各种操作,比如设置断点,单步执行,检查变量和内存内容,修改变量值等等。此外,LLDB还提供了一些高级功能,例如多线程调试,调试器命令和脚本等。在使用Android Studio进行原生代码调试时,LLDB可以帮助开发人员更轻松地诊断和解决代码中的问题。

参考

Android开发者官网

你可能感兴趣的:(NDK,android)