原生开发套件 (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 管理器安装这些组件:
- 在打开的项目中,从主菜单依次选择 Tools > Android > SDK Manager。
- 点击 SDK Tools 标签。
- 选中 LLDB、CMake 和 NDK 旁的复选框,如图 1 所示。
图 1 从 SDK 管理器中安装 LLDB、CMake 和 NDK。
- 点击 Apply,然后在下一个对话框中点击 OK。
- 安装完成后,点击 Finish,然后点击 OK。
创建或导入原生项目
Android Studio 设置完成后,可以直接创建支持 C/C++ 的新项目。但如果您要向现有 Android Studio 项目添加或导入原生代码,则需要按以下基本流程操作:
-
创建新的原生源文件,并将其添加到 Android Studio 项目中。
- 如果您已经拥有原生代码或想要导入预编译原生库,则可跳过此步骤。
-
创建 CMake 编译脚本,告知 CMake 如何将原生源文件编译入库。如果导入和关联预编译库或平台库,您也需要此编译脚本。
- 如果现有的原生库已有
CMakeLists.txt
编译脚本,或使用 ndk-build 并包含Android.mk
编译脚本,则可跳过此步骤。
- 如果现有的原生库已有
-
提供一个指向 CMake 或 ndk-build 脚本文件的路径,将 Gradle 关联到原生库。Gradle 使用编译脚本将源代码导入您的 Android Studio 项目并将原生库(SO 文件)打包到 APK 中。
注意:如果您的现有项目使用已弃用的
ndkCompile
工具,则应先打开build.properties
文件,并删除以下代码行,然后再配置 Gradle 以使用 CMake 或 ndk-build:// Remove this line android.useDeprecatedNdk = true
-
通过点击 Run
编译并运行应用。Gradle 会以依赖项的形式添加 CMake 或 ndk-build 进程,用于编译原生库并将其随 APK 一起打包。
应用在物理设备或模拟器上运行后,您可以使用 Android Studio 调试应用。要详细了解 NDK 及其组件,请参阅概念页面。