Jni学习之Android Studio集成C++代码
[TOC]
文章参考:https://developer.android.com/studio/projects/add-native-code?hl=zh-cn
文章参考:https://juejin.im/post/5db28ad4f265da4cf022c866
文章参考:《NDK开发指南》https://developer.android.com/training/articles/perf-jni?hl=zh-cn
概述
您可以向 Android 项目添加 C 和 C++ 代码,只需将相应的代码添加到项目模块的 cpp 目录中即可。在您构建项目时,这些代码会编译到一个可由 Gradle 与您的 APK 打包在一起的原生库中。然后,Java 或 Kotlin 代码即可通过 Java 原生接口 (JNI) 调用原生库中的函数。如需详细了解如何使用 JNI 框架,请参阅 Android JNI 提示。
Android Studio 支持适用于跨平台项目的 CMake,以及速度比 CMake 更快但仅支持 Android 的 ndk-build。目前不支持在同一模块中同时使用 CMake 和 ndk-build。
如果您想要将现有的 ndk-build 库导入到 Android Studio 项目,请了解如何将 Gradle 关联到原生库项目。
准备工作
下载 NDK 和构建工具
如需为您的应用编译和调试原生代码,您需要以下组件:
Android 原生开发套件 (NDK):一个工具集,让您能够在 Android 项目中使用 C 和 C++ 代码;它提供了各种平台库,让您能够管理原生 Activity 并访问实体设备组件,例如传感器和轻触输入。
CMake:一款外部构建工具,可与 Gradle 搭配使用来构建原生库。如果您只计划使用 ndk-build,则不需要此组件
LLDB:Android Studio 用于调试原生代码的调试程序。
如需了解如何安装这些组件,请参阅安装和配置 NDK、CMake 和 LLDB。
创建支持 C/C++ 的新项目
创建支持原生代码的新项目的步骤与创建任何其他 Android Studio 项目的步骤相似,但前者还需要执行一个额外的步骤:
在向导的 Choose your project 部分中,选择 Native C++ 项目类型。
点击 Next。
填写向导下一部分中的所有其他字段。
点击 Next。
在向导的 Customize C++ Support 部分中,您可以使用 C++ Standard 字段自定义项目。使用下拉列表选择您想要使用哪种 C++ 标准化。选择 Toolchain Default 可使用默认的 CMake 设置。
点击 Finish。
在 Android Studio 完成新项目的创建后,请从 IDE 左侧打开 Project 窗格,然后选择 Android 视图。如图 2 所示,Android Studio 会添加 cpp 组:
安装及配置 NDK 和 CMake
如需为您的应用编译和调试原生代码,您需要以下组件:
- Android 原生开发套件 (NDK):一套工具,可让您在 Android 应用中使用 C 和 C++ 代码。
- CMake:一款外部构建工具,可与 Gradle 搭配使用来构建原生库。如果您只计划使用 ndk-build,则不需要此组件。
- LLDB:Android Studio 用于调试原生代码的调试程序。默认情况下,安装 Android Studio 时会随同安装 LLDB。
配置特定版本的 CMake
SDK 管理器包含 CMake 的 3.6.0 分支版本和 3.10.2 版本。未设置特定 CMake 版本的项目使用 CMake 3.10.2 进行构建。如需设置 CMake 版本,请将以下内容添加到模块的 build.gradle
文件中:
1 | android { |
在 **cpp** 组中,您可以找到项目中的所有原生源代码文件、头文件、CMake 或 ndk-build 的构建脚本,以及项目中的预构建库。对于新项目,Android Studio 会创建一个示例 C++ 源代码文件 `native-lib.cpp`,并将其置于应用模块的 `src/main/cpp/` 目录中。此示例代码提供了一个简单的 C++ 函数 `stringFromJNI()`,它会返回字符串“Hello from C++”。如需了解如何向项目中添加其他源代码文件,请参阅介绍如何[创建新的原生源代码文件](https://developer.android.com/studio/projects/add-native-code?hl=zh-cn#create-sources)的部分。
我们看一下,我们build.gradle里面
1 | // 导入CMake构建。声明C++的版本号 |
执行完成之后,我们可以看一下编译产物:
我们看到在build目录下的中间产物的目录下面的cmake/debug/目录下就有我们的中间产物
与 `build.gradle` 文件指示 Gradle 如何构建应用一样,CMake 和 ndk-build 需要构建脚本以确定如何构建您的原生库。对于新项目,Android Studio 会创建 CMake 构建脚本 `CMakeLists.txt`,并将其置于模块的根目录中。如需详细了解此构建脚本的内容,请参阅[配置 CMake](https://developer.android.com/studio/projects/configure-cmake?hl=zh-cn)。
关于如何配置CMake: https://developer.android.com/studio/projects/configure-cmake?hl=zh-cn
现有Android工程添加C/C++ 代码
向现有 Android Studio 项目添加或导入原生代码,则需要按以下基本流程操作:
这部分其实很简单,就把我我们从新工程里面生成的那些文件放在现有工程的对应未知。就可以了.
主要有下面几个工程修改:
- build.gradle里面面的CMake配置
- src/main/cpp的目录下的文件拷贝到新的工程
创建新的 C/C++ 源代码文件
如需将新的 C/C++ 源代码文件添加到现有项目,请按以下步骤操作:
使用CMake创建HelloWorld的工程
https://developer.android.com/codelabs/android-studio-cmake?hl=zh-cn#0