4.1 Android NDK 简介
原生开发套件(NDK)是一套工具,使您能够在 Android 应用中使用 C/C++ 代码,并提供众多平台库,您可以使用这些平台库管理原生 activity 和访问实体设备组件,例如传感器和触控输入。如果您需要实现以下一个或多个目标,那么 NDK 就能派上用场:
- 进一步提升设备性能,以降低延迟或运行游戏或物理模拟等计算密集型应用。
- 重复使用 C/C++ 库。
可以在 Android Studio 中使用 NDK 将 C/C++ 代码编译到原生库中,然后使用 Android Studio 的集成构建系统 Gradle 将原生库打包到 APK 中。Java 代码随后可以通过 JNI 框架调用原生库中的函数。
Android Studio 编译原生库的默认构建工具是 CMake。由于很多现有项目都使用 ndk-build 构建工具包,因此 Android Studio 也支持 ndk-build。不过,如果您要创建新的原生库,则应使用 CMake。
1 下载 NDK 和工具
如需为您的应用编译和调试原生代码,您需要以下组件:
- Android 原生开发套件 (NDK):这套工具使您能在 Android 应用中使用 C 和 C++ 代码。
- CMake:一款外部构建工具,可与 Gradle 搭配使用来构建原生库。如果您只计划使用 ndk-build,则不需要此组件。
- LLDB:Android Studio 用于调试原生代码的调试程序。
在构建应用时,主要涉及到以下组件:
- 原生共享库:NDK 从 C/C++ 源代码构建这些库或
.so
文件。 - 原生静态库:NDK 也可以构建静态库或
.a
文件,可以将静态库关联到其它库。 - Java 原生接口(JNI):JNI 是 Java 和 C++ 组件用于相互通信的接口。
- 应用二进制接口(ABI):ABI 可以非常精确地定义应用的机器代码在运行时应该如何与系统交互。NDK 根据这些定义构建
.so
文件。不同的 ABI 对应不同的架构:NDK 为 32 位 ARM、AArch64、x86 及 x86-64 提供 ABI 支持。
2 创建或导入原生项目
Android Studio 设置完成后,可以直接创建支持 C/C++ 的新项目。但如果您要向现有 Android Studio 项目添加或导入原生代码,则需要按以下基本流程操作:
- 创建新的原生源代码文件,并将其添加到 Android Studio 项目中。如果您已经拥有原生代码或想要导入预构建原生库,则可跳过此步骤。
- 创建 CMake 构建脚本,指示 CMake 如何将原生源文件构建入库。如果导入和关联预构建库或平台库,您也需要此构建脚本。如果现有的原生库已有 CMakeLists.txt 构建脚本,则可跳过此步骤。
- 提供一个指向 CMake 脚本文件的路径,将 Gradle 关联到原生库。Gradle 使用构建脚本将源代码导入您的 Android Studio 项目并将原生库(SO 文件)打包到 APK 中。
- 通过点击 Run 图标 从主菜单运行应用 构建并运行应用。Gradle 会以依赖项的形式添加 CMake 或 ndk-build 进程,用于编译和构建原生库并将其随 APK 一起打包。