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

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

本页介绍了如何使用 Android Studio 或sdkmanager工具下载和安装这些组件。

安装 NDK 和 CMake

当您安装 NDK 时,Android Studio 会选择最新的 NDK。对于大多数项目,安装此默认版本的 NDK 已经足够。如果您的项目需要一个或多个特定版本的 NDK,您可以下载并配置特定版本。这样做有助于确保在每个项目都依赖于特定版本的 NDK 的情况下,项目之间的编译可重现。Android Studio 会将所有版本的 NDK 安装到 android-sdk/ndk/ 目录中。

要在 Android Studio 中安装 CMake 和默认 NDK,请执行以下操作:

  1. 打开项目后,依次点击 Tools > SDK Manager
  2. 点击 SDK Tools 标签页。
  3. 选中 NDK (Side by side) 和 CMake 复选框。图 1:显示  NDK (Side by side) 选项的  SDK Tools 窗口

 注意:如果您在 ndk-bundle 文件夹中安装了 NDK,它会显示在标签为 NDK 的列表中。如果您使用的是 Android Gradle 插件 3.5.0 或更高版本,则可以选中或取消选中该复选框。取消选中该复选框会卸载 NDK,释放磁盘空间,并使该复选框从列表中消失。如果您卸载旧版 NDK,请从项目的 local.properties 文件中移除 ndk.dir 值,该值现已弃用。

  1. 点击 OK
    此时系统会显示一个对话框,告诉您 NDK 软件包占用了多少磁盘空间。
  2. 点击 OK
  3. 安装完成后,点击 Finish
  4. 您的项目会自动同步编译文件并执行编译。修正发生的所有错误。

安装特定版本的 NDK

要安装特定版本的 NDK,请执行以下操作:

  1. 打开项目后,依次点击 Tools > SDK Manager
  2. 点击 SDK Tools 标签页。
  3. 选中 Show Package Details 复选框。
  4. 选中 NDK (Side by side) 复选框及其下方与您要安装的 NDK 版本对应的复选框。Android Studio 会将所有版本的 NDK 安装到 android-sdk/ndk/ 目录中。图 2:显示  NDK (Side by side) 选项的  SDK Tools 窗口

 注意:如果您在 ndk-bundle 文件夹中安装了 NDK,它会显示在标签为 NDK 的列表中。如果您使用的是 Gradle 3.5 版或更高版本,则可以选中或取消选中该复选框。取消选中该复选框会卸载已安装的 NDK,释放磁盘空间,并使复选框从列表中消失。如果您卸载旧版 NDK,请从项目的 local.properties 文件中移除 ndk.dir 值,该值现已弃用。

  1. 点击 OK
    此时系统会显示一个对话框,告诉您 NDK 软件包占用了多少空间。
  2. 点击 OK
  3. 安装完成后,点击 Finish
  4. 您的项目会自动同步编译文件并执行编译。修正发生的所有错误。
  5. 为每个模块配置要使用的 NDK 版本。使用 Android Studio 3.6 或更高版本时,如果您不指定版本,Android Gradle 插件会选择已知兼容的版本

从命令行安装 NDK

要通过命令行安装一个或多个版本的 NDK,请执行以下操作:

  1. 使用 sdkmanager 工具查看可用的 CMake 和 NDK 软件包版本:
sdkmanager --list
  1. 向 sdkmanager 传递要安装的软件包的字符串。 例如,要安装 CMake 和 NDK,请使用以下语法:
sdkmanager --install
              "ndk;major.minor.build"
              "cmake;major.minor.micro.build"
  1. 为项目中的每个模块配置要使用的 NDK 版本。

在项目中配置特定版本的 NDK

如果您安装特定版本的 NDK 并希望在模块中使用它,请使用模块的 build.gradle 文件中的 android.ndkVersion 属性进行指定,如以下代码示例所示。

android {
        ndkVersion "major.minor.build"
    }