NDK 入门

原生开发工具包 (NDK) 是一组工具,允许您在 Android 中使用 C 和 C++ 代码,并提供 平台库,您可以使用这些库来管理原生活动并访问物理设备组件(例如传感器和触摸输入)。对于大多数只需要使用 Java 代码和框架 API 来开发应用程序的 Android 初学者来说,NDK 可能不适合。但是,在需要执行以下一项或多项操作的情况下,NDK 可能很有用

  • 从设备中挤出额外的性能,以实现低延迟或运行计算量大的应用程序(例如游戏或物理模拟)。
  • 重用您自己或其他开发人员的 C 或 C++ 库。

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

Android Studio 的默认构建工具是 CMake,用于编译原生库。由于使用该构建工具包的现有项目数量众多,因此 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 用于调试原生代码的调试器。

有关安装这些组件的信息,请参阅 安装和配置 NDK 和 CMake

创建或导入原生项目

设置好 Android Studio 后,您可以直接创建支持 C/C++ 的新项目。但是,如果您想在现有 Android Studio 项目中添加或导入原生代码,则需要遵循以下基本流程。

  1. 创建新的原生源文件 并将其添加到您的 Android Studio 项目中。
    • 如果您已经拥有原生代码或想要导入预先构建的原生库,则可以跳过此步骤。
  2. 创建 CMake 构建脚本 以告诉 CMake 如何将您的原生源代码构建成库。如果您正在导入和链接预先构建的库或平台库,则也需要此构建脚本。
    • 如果您的现有原生库已包含 CMakeLists.txt 构建脚本,或者使用 ndk-build 并包含 Android.mk 构建脚本,则可以跳过此步骤。
  3. 将 Gradle 链接到您的原生库,方法是提供 CMake 或 ndk-build 脚本文件的路径。Gradle 使用构建脚本将源代码导入到您的 Android Studio 项目中,并将您的原生库(SO 文件)打包到 APK 中。

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

    // Remove this line
    android.useDeprecatedNdk = true
    
  4. 构建并运行您的应用程序,方法是点击运行 run then run app from the main menu。Gradle 将您的 CMake 或 ndk-build 过程添加为依赖项,以便编译、构建和将您的原生库与您的 APK 打包在一起。

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