通过将代码放入项目模块中的cpp
目录中,可以向您的 Android 项目添加 C 和 C++ 代码。构建项目时,此代码将编译成 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++ 文件。
如果您想向现有项目添加原生代码,请按照以下步骤操作
-
创建新的原生源文件并将文件添加到您的 Android Studio 项目。
- 如果您已经拥有原生代码或想要导入预构建的原生库,请跳过此步骤。
-
配置 CMake 以将您的原生源代码构建到库中。如果您要导入并链接预构建的库或平台库,则需要此构建脚本。
- 如果您有现有的原生库,该库已经具有
CMakeLists.txt
构建脚本或使用ndk-build
并包含Android.mk
构建脚本,请跳过此步骤。
- 如果您有现有的原生库,该库已经具有
-
配置 Gradle,方法是提供 CMake 或
ndk-build
脚本文件的路径。Gradle 使用构建脚本将源代码导入您的 Android Studio 项目并将您的原生库打包到应用中。
配置项目后,可以使用JNI 框架从 Java 或 Kotlin 代码访问您的原生函数。要构建和运行您的应用,请点击运行 。
注意:如果您的现有项目使用已弃用的ndkCompile
工具,请迁移到使用 CMake 或ndk-build
。
下载 NDK 和构建工具
要编译和调试应用的原生代码,您需要以下组件
- Android 原生开发工具包 (NDK):一种工具集,允许您将 C 和 C++ 代码与 Android 结合使用。NDK 提供平台库,让您可以管理原生活动并访问物理设备组件,例如传感器和触摸输入。
-
CMake:一种与 Gradle 一起使用的外部构建工具,用于构建您的原生库。如果您只计划使用
ndk-build
,则不需要此组件。 - LLDB:Android Studio 中的调试器,用于调试原生代码。
有关安装这些组件的信息,请参阅安装和配置 NDK 和 CMake。
创建一个支持 C/C++ 的新项目
要创建一个支持原生代码的新项目,该过程类似于创建任何其他 Android Studio 项目,但增加了一个步骤
- 在向导的选择您的项目部分中,选择原生 C++项目类型。
- 点击下一步。
- 完成向导下一部分中的所有其他字段。
- 点击下一步。
- 在向导的自定义 C++ 支持部分中,您可以使用C++ 标准字段自定义您的项目。
- 使用下拉列表选择要使用的 C++ 标准化版本。选择工具链默认值将使用默认的 CMake 设置。
- 点击完成。
Android Studio 完成创建新项目后,打开 IDE 左侧的项目窗格,然后从菜单中选择Android视图。如图 1 所示,Android Studio 添加了cpp组
注意:此视图并未反映磁盘上的实际文件层次结构,而是对类似的文件进行分组以简化项目导航。
在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++”。以下概述描述了构建和运行示例应用时发生的事件
- Gradle 调用您的外部构建脚本
CMakeLists.txt
。 - CMake 按照构建脚本中的命令将 C++ 源文件
native-lib.cpp
编译成共享对象库,并将其命名为libnative-lib.so
。然后,Gradle 将其打包到应用中。 - 在运行时,应用的
MainActivity
使用System.loadLibrary()
加载原生库。库的原生函数stringFromJNI()
现在可供应用使用。 -
MainActivity.onCreate()
调用stringFromJNI()
,该函数返回"Hello from C++"
并使用它来更新TextView
。
要验证 Gradle 是否将原生库打包到应用中,请使用APK 分析器
- 选择构建 > 构建捆绑包/APK > 构建 APK。
- 选择构建 > 分析 APK。
- 从
app/build/outputs/
目录中选择 APK 或 AAB,然后点击确定。 - 如图 2 所示,您可以在 APK 分析器窗口的
lib/<ABI>/
下看到libnative-lib.so
。
提示:如果您想尝试使用原生代码的其他 Android 应用,请点击文件 > 新建 > 导入示例,然后从Ndk列表中选择一个示例项目。
创建新的 C/C++ 源文件
要向现有项目添加新的 C/C++ 源文件,请按照以下步骤操作
- 如果您的应用的主源集中尚不存在
cpp/
目录,请按照以下步骤创建一个: - 打开 IDE 左侧的项目窗格,然后从菜单中选择项目视图。
- 导航到your-module > src。
- 右键点击main目录,然后选择新建 > 目录。
- 输入
cpp
作为目录名称,然后点击确定。 - 右键点击
cpp/
目录,然后选择新建 > C/C++ 源文件。 - 输入源文件的名称,例如
native-lib
。 - 从类型菜单中,选择源文件的扩展名,例如
.cpp
。- 点击编辑文件类型 以向菜单中添加其他文件类型,例如
.cxx
或.hxx
。在弹出的新建文件扩展名对话框中,从源扩展名和头文件扩展名菜单中选择另一个文件扩展名,然后点击确定。
- 点击编辑文件类型 以向菜单中添加其他文件类型,例如
- 要创建头文件,请选中创建关联的头文件复选框。
- 点击确定。
向项目添加新的 C/C++ 文件后,您仍然需要配置 CMake才能将这些文件包含在您的原生库中。
其他资源
要了解有关在您的应用中支持 C/C++ 代码的更多信息,请尝试以下资源。
Codelabs
- 使用 Android Studio 创建 Hello-CMake 此 codelab 将向您展示如何使用 Android Studio CMake 模板启动 Android NDK 项目开发。