将 C 和 C++ 代码添加到您的项目

将 C 和 C++ 代码放入您项目模块中的 cpp 目录下,即可将这些代码添加到您的 Android 项目中。构建项目时,这些代码会被编译成原生库,Gradle 可以将其与您的应用一起打包。然后,您的 Java 或 Kotlin 代码可以通过 Java 原生接口 (JNI) 调用原生库中的函数。要详细了解如何使用 JNI 框架,请阅读 适用于 Android 的 JNI 提示

Android Studio 支持 CMake,这对于跨平台项目很有用。Android Studio 还支持 ndk-build,它可能比 CMake 快,但仅支持 Android。目前不支持在同一模块中使用 CMake 和 ndk-build

要将现有 ndk-build 库导入到您的 Android Studio 项目中,请了解如何将 Gradle 关联到您的原生库项目

本页面介绍如何设置 Android Studio 及所需的构建工具,创建支持 C/C++ 的新项目,以及向您的项目添加新的 C/C++ 文件

如果您想向现有项目中添加原生代码,请按以下步骤操作

  1. 创建新的原生源文件,并将文件添加到您的 Android Studio 项目中。
    • 如果您已有原生代码或想导入预构建的原生库,请跳过此步骤。
  2. 配置 CMake,以将原生源代码构建到库中。如果您要导入预构建库或平台库并与其链接,则需要此构建脚本。
    • 如果您已有原生库且该库已有 CMakeLists.txt 构建脚本,或使用 ndk-build 并包含 Android.mk 构建脚本,请跳过此步骤。
  3. 配置 Gradle,提供您的 CMake 或 ndk-build 脚本文件的路径。Gradle 使用构建脚本将源代码导入到您的 Android Studio 项目中,并将您的原生库打包到应用中。

配置好项目后,即可使用 JNI 框架从 Java 或 Kotlin 代码访问您的原生函数。要构建并运行您的应用,请点击运行 先点击运行,再从菜单栏点击运行应用

注意:如果您的现有项目使用了已弃用的 ndkCompile 工具,请迁移到使用 CMake 或 ndk-build

下载 NDK 和构建工具

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

  • Android 原生开发套件 (NDK):一个工具集,可让您将 C 和 C++ 代码用于 Android。NDK 提供平台库,可让您管理原生 Activity 并访问物理设备组件,例如传感器和触摸输入。
  • CMake:一个与 Gradle 协同工作的外部构建工具,用于构建您的原生库。如果您只打算使用 ndk-build,则无需此组件。
  • LLDB:Android Studio 中的调试程序,用于调试原生代码

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

创建支持 C/C++ 的新项目

要创建支持原生代码的新项目,此过程类似于创建任何其他 Android Studio 项目,但需要额外的步骤

  1. 在该向导的选择您的项目部分,选择原生 C++ 项目类型。
  2. 点击下一步
  3. 完成该向导下一部分中的所有其他字段。
  4. 点击下一步
  5. 在该向导的自定义 C++ 支持部分,您可以使用C++ 标准字段自定义项目。
    • 使用下拉列表选择您要使用的 C++ 标准化版本。选择Toolchain Default 会使用默认的 CMake 设置。
  6. 点击完成

Android Studio 完成创建新项目后,打开 IDE 左侧的项目窗格,并从菜单中选择 Android 视图。如图 1 所示,Android Studio 会添加 cpp

图 1. 您的原生源文件和外部构建脚本的 Android 视图组。

注意:此视图不反映磁盘上的实际文件层级结构,而是将类似文件分组以简化项目导航。

cpp 组中,您可以找到所有的原生源文件、头文件、用于 CMake 或 ndk-build 的构建脚本,以及作为项目一部分的预构建库。对于新项目,Android Studio 会创建一个示例 C++ 源文件 native-lib.cpp,并将其放入您的应用模块的 src/main/cpp/ 目录中。此示例代码提供了一个简单的 C++ 函数 stringFromJNI(),它返回字符串 "Hello from C++"。要了解如何向项目中添加其他源文件,请参阅有关如何创建新的原生源文件的部分。

build.gradle 文件指示 Gradle 如何构建应用类似,CMake 和 ndk-build 也需要一个构建脚本来了解如何构建您的原生库。对于新项目,Android Studio 会创建一个 CMake 构建脚本 CMakeLists.txt,并将其放入模块的根目录中。要详细了解此构建脚本的内容,请阅读配置 CMake

构建并运行示例应用

当您点击运行 先点击运行,再从菜单栏点击运行应用 时,Android Studio 会构建并启动一个应用,该应用会在您的 Android 设备或模拟器上显示文本 "Hello from C++"。以下概览描述了构建并运行示例应用时发生的事件

  1. Gradle 调用您的外部构建脚本 CMakeLists.txt
  2. CMake 按照构建脚本中的命令将 C++ 源文件 native-lib.cpp 编译成共享对象库,并将其命名为 libnative-lib.so。Gradle 然后将其打包到应用中。
  3. 在运行时,应用的 MainActivity 使用 System.loadLibrary() 加载原生库。库的原生函数 stringFromJNI() 现在可供应用使用。
  4. MainActivity.onCreate() 调用 stringFromJNI(),它返回 "Hello from C++" 并使用它来更新 TextView

要验证 Gradle 是否将原生库打包到应用中,请使用APK Analyzer

  1. 依次选择Build > Build Bundles(s) / APK(s) > Build APK(s)
  2. 依次选择Build > Analyze APK
  3. app/build/outputs/ 目录中选择 APK 或 AAB,然后点击确定
  4. 如图 2 所示,您可以在 APK Analyzer 窗口中看到 libnative-lib.solib/<ABI>/ 下方。

    图 2. 使用 APK Analyzer 找到原生库。

提示:如果您想试用使用原生代码的其他 Android 应用,请依次点击File > New > Import Sample,然后从 Ndk 列表中选择一个示例项目。

创建新的 C/C++ 源文件

要向现有项目添加新的 C/C++ 源文件,请按以下步骤操作

  1. 如果您的应用的主源集中还没有 cpp/ 目录,请按以下方式创建一个
    1. 打开 IDE 左侧的项目窗格,然后从菜单中选择项目视图。
    2. 导航到your-module > src
    3. 右键点击main 目录,然后依次选择 New > Directory
    4. 输入 cpp 作为目录名称,然后点击确定

  2. 右键点击 cpp/ 目录,然后依次选择 New > C/C++ Source File
  3. 为源文件输入名称,例如 native-lib
  4. 类型菜单中,为源文件选择文件扩展名,例如 .cpp
    • 点击修改文件类型 ,以将其他文件类型添加到菜单中,例如 .cxx.hxx。在弹出的新建文件扩展名对话框中,从源文件扩展名头文件扩展名菜单中选择其他文件扩展名,然后点击确定
  5. 要创建头文件,请勾选创建关联的头文件复选框。
  6. 点击确定

将新的 C/C++ 文件添加到项目后,您仍然需要配置 CMake 以将文件包含在您的原生库中。

其他资源

要详细了解如何在应用中支持 C/C++ 代码,请尝试以下资源。

Codelab