Android Studio中的Cmake

简介

CMake是一个跨平台的构建工具,用于自动化构建过程。在Android开发中,CMake经常被用来构建C/C++库,以便在Android应用中通过JNI(Java Native Interface)调用。

使用CMake可以方便地管理和构建C/C++库,并将其集成到Android Studio项目中。本文将向您介绍如何在Android Studio中使用CMake来构建C/C++库,并通过JNI与Java代码进行交互。

准备工作

在开始之前,您需要确保您已经安装好了Android Studio,并且具备一定的C/C++编程知识。

创建一个新的Android项目

首先,让我们创建一个新的Android项目。打开Android Studio,选择“Create New Project”,并按照向导的指示创建一个新的项目。

在项目中添加C++支持

在创建了新的Android项目后,我们需要在项目中启用C++支持。在Android Studio的菜单栏中,选择“File” -> “Project Structure”,进入“Project Structure”界面。

在“Project Structure”界面中,选择左侧的“SDK Location”,确保“Android NDK location”字段已经指向了您的NDK安装目录。

project_structure

接下来,选择左侧的“Modules”,然后选中您的主模块,并切换到“Dependencies”选项卡。点击右上角的“+”按钮,选择“Import Gradle Project”。

在弹出的对话框中,选择您的CMakeLists.txt文件所在的目录,并点击“OK”按钮。这样就成功地将C++支持添加到了您的Android项目中。

编写CMakeLists.txt文件

CMakeLists.txt文件是用于配置CMake构建过程的脚本文件。在您的项目根目录下创建一个名为“CMakeLists.txt”的文件,并在其中添加以下内容:

cmake_minimum_required(VERSION 3.4.1)

add_library(
    native-lib
    SHARED
    native-lib.cpp
)

find_library(
    log-lib
    log
)

target_link_libraries(
    native-lib
    ${log-lib}
)

上述代码定义了一个名为“native-lib”的共享库,并将其与一个名为“log”的系统库进行链接。

编写C++代码

在项目中创建一个名为“native-lib.cpp”的文件,并在其中编写以下代码:

#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

上述代码定义了一个名为“stringFromJNI”的JNI函数,它返回一个字符串。

在Java代码中调用C++函数

打开您的Java代码文件(例如MainActivity.java),并添加以下代码:

static {
    System.loadLibrary("native-lib");
}

public native String stringFromJNI();

上述代码首先加载名为“native-lib”的共享库,然后定义了一个名为“stringFromJNI”的JNI函数。

在您需要调用C++函数的地方,可以通过以下方式调用:

String result = stringFromJNI();

构建和运行项目

完成了以上准备工作后,您可以点击Android Studio的“Sync Project with Gradle Files”按钮来同步您的项目。

接下来,点击“Build” -> “Make Project”按钮来构建您的项目。

一旦构建成功,您可以点击“Run”按钮来运行您的项目,并在Logcat中查看来自C++函数的日志输出。

流程图

flowchart TD
    A[创建新的Android项目] --> B[启用C++支持]
    B --> C[添加CMakeLists.txt文件]
    C --> D[编写C++代码]
    D --> E[调用C++函数]
    E --> F[构建和运行项目]

类图

classDiagram
    MainActivity -- native-lib.cpp : JNI

结论

通过本文,您学会了如何在Android Studio中使用CMake构建C/C++库,并通过JNI与Java代码进行交互。希望本文对您有所帮助,祝您在Android开发中取得成功!