Android 向现有项目添加 C/C++ 代码
创建新的原生源文件(cpp 目录)
要在应用模块的主源代码集中创建一个包含新建原生源文件的 cpp/
目录,请按以下步骤操作:
-
从 IDE 的左侧打开 Project 窗格并从下拉菜单中选择 Project 视图。
-
导航到 您的模块 > src,右键点击 main 目录,然后选择 New > Directory。
-
为目录输入一个名称(例如
cpp
)并点击 OK。 -
右键点击您刚刚创建的目录,然后选择 New > C/C++ Source File。
-
为您的源文件输入一个名称,例如
native-lib
。 -
从Type下拉菜单中,为您的源文件选择文件扩展名,例如.cpp
- 点击 Edit File Types(右边的设置按钮),您可以向下拉菜单中添加其他文件类型,例如
.cxx
或.hxx
。在弹出的 C/C++ 对话框中,从 Source Extension 和 Header Extension 下拉菜单中选择另一个文件扩展名,然后点击 OK。
- 点击 Edit File Types(右边的设置按钮),您可以向下拉菜单中添加其他文件类型,例如
-
如果您还希望创建一个标头文件,请选中 Create an associated header 复选框。
-
点击 OK。
创建 CMake 构建脚本(CMakeLists.txt)
要创建一个可以用作 CMake 构建脚本的纯文本文件,请按以下步骤操作:
-
从 IDE 的左侧打开 Project 窗格并从下拉菜单中选择 Project 视图。
-
右键点击您的模块的根目录并选择
New > File
注:您可以在所需的任意位置创建构建脚本。不过,在配置构建脚本时,原生源文件和库的路径将与构建脚本的位置相关。
-
输入“CMakeLists.txt”作为文件名并点击 OK
您可以添加 CMake 命令,对您的构建脚本进行配置。要指示 CMake 从原生源代码创建一个原生库,请将
cmake_minimum_required()
和add_library()
命令添加到您的构建脚本中
将 Gradle 关联到您的原生库
2种方式
…使用AndroidStudio UI
使用 Android Studio UI 将 Gradle 关联到外部 CMake 或 ndk-build 项目
-
从 IDE 左侧打开 Project 窗格并选择 Android 视图。
-
右键点击您想要关联到原生库的模块(例如 app 模块),并从菜单中选择 Link C++ Project with Gradle。您应看到一个如图 4 所示的对话框。
-
从下拉菜单中,选择CMake或ndk-build
- 如果您选择 CMake,请使用 Project Path 旁的字段为您的外部 CMake 项目指定
CMakeLists.txt
脚本文件。 - 如果您选择 ndk-build,请使用 Project Path 旁的字段为您的外部 ndk-build 项目指定
Android.mk
脚本文件。如果Application.mk
文件与您的Android.mk
文件位于相同目录下,Android Studio 也会包含此文件。
- 如果您选择 CMake,请使用 Project Path 旁的字段为您的外部 CMake 项目指定
-
点击 OK
…手动配置Gradle
要手动配置 Gradle 以关联到您的原生库,您需要将
externalNativeBuild {}
块添加到模块级build.gradle
文件中,并使用cmake {}
或ndkBuild {}
对其进行配置:android { ... defaultConfig {...} buildTypes {...} // Encapsulates your external native build configurations. externalNativeBuild { // Encapsulates your CMake build configurations. cmake { // Provides a relative path to your CMake build script. path "CMakeLists.txt" } } }
注:如果您想要将 Gradle 关联到现有 ndk-build 项目,请使用 ndkBuild {}
块而不是 cmake {}
,并提供 Android.mk
文件的相对路径。如果 Application.mk
文件与您的 Android.mk
文件位于相同目录下,Gradle 也会包含此文件
来源:
AndroidStudio Cmake学习–如何漂亮的使用jni
Android 创建支持 C/C++ 的新项目
Android NDK Guide