Android NDK 简介(Android NDK 教程 一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Lee_Swifter/article/details/88320713

这是 Android NDK 开发的第一篇文章,内容当然都是一些简单的概念性的问题。但是像 SDK 安装,环境变量配置什么的,也都是大家应该懂的内容,这里就不在赘述了。后面将会对 Android NDK 开发中涉及到的一些知识进行讲解。

Android 上的 C++ 简介

在介绍 Android NDK 之前,咱们先了解几个名词,这些名词将会是贯穿在 Android 开发过程中的,也很非常简单:

  • Android 软件开发包 Android Software Development Kit, SDK
  • Android 原生开发包 Android Native Development Kit,NDK
  • Java 开发包 Java Development Kit,JDK
  • GNU Make 构建系统

另外,我们来先了解以下 JNI 和 NDK ,以及它们与 Android 原生开发有什么关系。这里先有一个概念即可,后面将进行详细的阐述。

JNI 是 Java 语言提供的 Java 和 C/C++ 相互沟通的机制,Java 可以通过 JNI 调用本地的 C/C++ 代码,本地 的 C/C++ 的代码也可以调用 Java 代码。JNI 是本地编程接口,Java 和 C/C++ 互相通过的接口。Java 通过 C/C++ 使用本地的代码的一个关键性原因在于 C/C++ 代码的高效性。 代码和其他语言写的代码进行交互。

NDK 是一系列工具的集合。它提供了一系列的工具,帮助开发者快速开发 C(或C++)的动态库,并能自动将 s o 和 Java 应用一起打包成 apk。这些工具对开发者的帮助是巨大的。它集成了交叉编译器,并提供了相应的 mk 文件隔离 CPU、平台、ABI 等差异,开发人员只需要简单修改 mk 文件(指出“哪些文件需要编译”、“编译特 性要求”等),就可以创建出 so。它可以自动地将 so 和 Java 应用一起打包,极大地减轻了开发人员的打包工 作。

NDK 是什么

Android NDK 是 Android 软件开发包 SDK 的相关工具集,用来扩展 Android SDK 的功能,从而使开发人员能够使用机器代码生成的编程语言(如C、C++和汇编语言)实现一些对代码性能要求较高的模块并将这些模块嵌入到 Android 应用程序中。

NDK 提供的组件

Android NDK 不是一个单独的工具:它是一个包含 API、交叉编译器、链接程序、调试器、构建工具、文档和示例应用程序的综合工具集。

以下是 Android NDK 的一些主要组建:

  • ARM、x86 和 MIPS 交叉编译器
  • 构建系统
  • Java 原生接口头文件
  • C 库
  • Math 库
  • POSIX 线程
  • 最小的 C++ 库
  • ZLib 压缩库
  • 动态链接库
  • Android 日志库
  • Android 像素缓冲区库
  • Android 原生应用 APIs
  • OpenGL ES 3D 图形库
  • OpenSL ES 原生音频库
  • OpenMax AL 最小支持
  • Vulkan

NDK 的目录结构

  • ndk-build 该 shell 脚本是 Android NDK 构建系统的起点
  • ndk-gdb 该 shell 脚本允许用 GNU 调试器调试原生组建
  • ndk-stack 该 shell 脚本可以帮助分析原生组建崩溃时的堆栈追踪
  • build 该目录包含了 Android NDK 构建系统的所有模块
  • platforms 该目录包含了支持不同 Android 目标版本的头文件和库文件。Android NDK 构建系统会根据具体的 Android 版本自动引用这些文档
  • samples 该目录包含了一些示例程序,但是在最新的 NDK 版本中已经没有这个文件夹了
  • sources 该目录包含了可供开发人员导入到现有的 Android NDK 项目的一些共享模块
  • toolchains 该目录包含目前 Android NDK 支持的不同目标机体系结构的交叉编译器。Android NDK 目前支持 ARM、x86 和 MIPS 机体系结构。 Android NDK 构建系统根据选定的体系结构使用不同的交叉编译器。

Android NDK 最重要的组件就是它的构建系统,它包含了所有的其他组件。

NDK 构建系统所提供的功能

  • 建立一个共享库
  • 建立多个共享库
  • 建立静态库
  • 利用共享库共享通用模块
  • 在多种 NDK 项目间共享模块
  • 使用预建库
  • 建立独立的可执行文件
  • 其他构建系统变量和宏
  • 定义新变量和条件操作

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Lee_Swifter/article/details/88320713