NDK 入门指南

原生开发套件 (NDK) 是一套工具,使您能够在 Android 应用中使用 C 和 C++ 代码,并提供众多平台库,您可使用这些平台库管理原生 Activity 和访问物理设备组件,例如传感器和轻触输入。NDK 可能不适合大多数 Android 编程初学者,这些初学者只需使用 Java 代码和框架 API 开发应用。然而,如果您需要完成以下一个或多个事项,那么 NDK 就能派上用场:

  • 进一步提升设备性能,以降低延迟,或运行计算密集型应用,如游戏或物理模拟。
  • 重复使用您自己或其他开发者的 C 或 C++ 库。

您可以在 Android Studio 2.2 或更高版本 中使用 NDK 将 C 和 C++ 代码编译到原生库中,然后使用 Android Studio 的集成编译系统 Gradle 将原生库打包到 APK 中。Java 代码随后可以通过 Java 原生接口 (JNI) 框架调用原生库中的函数。要详细了解 Gradle 和 Android 编译系统,请参阅配置编译系统

Android Studio 编译原生库的默认编译工具是 CMake。由于很多现有项目都使用 ndk-build 编译工具包,因此 Android Studio 也支持 ndk-build。不过,如果您要创建新的原生库,则应使用 CMake。

本指南提供了在 Android Studio 中设置和运行 NDK 所需的信息。如果您没有最新版 Android Studio,请立即下载并安装吧。

实验性 Gradle 的用户注意事项:如果您符合以下任意一种情况,请考虑迁移到插件版本 2.2.0 或更高版本,并使用 CMake 或 ndk-build 编译原生库:您的原生项目已经使用 CMake 或者 ndk-build;您想要使用稳定版本的 Gradle 编译系统;或者您希望支持插件工具,例如 CCache。否则,您可以继续使用实验性版本的 Gradle 和 Android 插件

下载 NDK 和工具

要为您的应用编译和调试原生代码,您需要以下组件:

  • Android 原生开发套件 (NDK):这套工具使您能在 Android 应用中使用 C 和 C++ 代码。
  • CMake:一款外部编译工具,可与 Gradle 搭配使用来编译原生库。如果您只计划使用 ndk-build,则不需要此组件。
  • LLDB:Android Studio 用于调试原生代码的调试程序。

您可以使用 SDK 管理器安装这些组件:

  1. 在打开的项目中,从主菜单依次选择 Tools > Android > SDK Manager
  2. 点击 SDK Tools 标签。
  3. 选中 LLDBCMakeNDK 旁的复选框,如图 1 所示。

    图 1 从 SDK 管理器中安装 LLDB、CMake 和 NDK。

  4. 点击 Apply,然后在下一个对话框中点击 OK
  5. 安装完成后,点击 Finish,然后点击 OK

创建或导入原生项目

Android Studio 设置完成后,可以直接创建支持 C/C++ 的新项目。但如果您要向现有 Android Studio 项目添加或导入原生代码,则需要按以下基本流程操作:

  1. 创建新的原生源文件,并将其添加到 Android Studio 项目中。
    • 如果您已经拥有原生代码或想要导入预编译原生库,则可跳过此步骤。
  2. 创建 CMake 编译脚本,告知 CMake 如何将原生源文件编译入库。如果导入和关联预编译库或平台库,您也需要此编译脚本。
    • 如果现有的原生库已有 CMakeLists.txt 编译脚本,或使用 ndk-build 并包含 Android.mk 编译脚本,则可跳过此步骤。
  3. 提供一个指向 CMake 或 ndk-build 脚本文件的路径,将 Gradle 关联到原生库。Gradle 使用编译脚本将源代码导入您的 Android Studio 项目并将原生库(SO 文件)打包到 APK 中。

    注意:如果您的现有项目使用已弃用的 ndkCompile 工具,则应先打开 build.properties 文件,并删除以下代码行,然后再配置 Gradle 以使用 CMake 或 ndk-build:

        // Remove this line
        android.useDeprecatedNdk = true
        
  4. 通过点击 Run 从主菜单运行应用 编译并运行应用。Gradle 会以依赖项的形式添加 CMake 或 ndk-build 进程,用于编译原生库并将其随 APK 一起打包。

应用在物理设备或模拟器上运行后,您可以使用 Android Studio 调试应用。要详细了解 NDK 及其组件,请参阅概念页面。