返回

CMake 入门:Android NDK 开发必备指南

Android

使用 CMake 充分利用 Android NDK

初学者指南

作为 Android 开发者,利用底层 C/C++ 代码的强大功能至关重要,而 Android NDK 就是实现这一目标的绝佳工具。然而,驾驭 NDK 离不开构建系统 CMake 的加持。这篇全面指南将带你深入了解 CMake,从基本概念到高级用法,助你轻松上手 NDK 开发。

什么是 CMake?

CMake 是一款跨平台构建系统,负责生成编译脚本并管理项目依赖关系。它兼容 Linux、Windows 和 macOS 等多种平台,简化了跨平台开发。

CMake 在 NDK 中的作用

在 Android NDK 中,CMake 主要用于配置和编译原生代码。它通过解析 CMakeLists.txt 文件获取项目结构、依赖关系和编译设置,然后生成 ndk-build 工具使用的编译脚本。

CMake 基本语法

CMake 语法简单易懂:

  • project(name) :定义项目名称
  • cmake_minimum_required(version) :指定 CMake 所需最低版本
  • add_executable(name source_files) :添加可执行目标并指定源文件
  • add_library(name source_files) :添加库目标并指定源文件
  • target_link_libraries(target library) :将目标链接到指定库

创建 Android NDK 项目

  1. 创建 Android Studio 项目。
  2. 在 app/src/main/cpp 目录下创建 CMakeLists.txt 文件。
  3. 添加以下代码到 CMakeLists.txt 文件中:
cmake_minimum_required(VERSION 3.4.1)
project(ndk-example)

add_executable(hello-jni src/main/cpp/hello-jni.cpp)
  1. 在 app/src/main/cpp/ 目录下创建 hello-jni.cpp 文件,并添加以下代码:
#include <jni.h>

JNIEXPORT jstring JNICALL
Java_com_example_ndk_example_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    return env->NewStringUTF("Hello from JNI!");
}
  1. 在 MainActivity.java 文件中,添加以下代码来调用原生方法:
public class MainActivity extends AppCompatActivity {

    static {
        System.loadLibrary("hello-jni");
    }

    public native String stringFromJNI();
}
  1. 构建并运行项目。

高级 CMake 用法

掌握 CMake 基本语法后,可以探索高级用法,例如:

  • 添加编译选项 :使用 add_compile_options() 函数添加编译选项。
  • 使用外部库 :通过 find_package() 函数查找并链接到外部库。
  • 创建自定义命令 :使用 add_custom_command() 函数创建自定义编译命令。
  • 支持多架构 :使用 target_compile_options() 函数针对不同架构配置编译选项。

常见问题解答

  • CMake 与 Android Gradle 构建系统有何区别?
    CMake 负责原生代码编译,而 Gradle 负责构建和管理整个 Android 应用程序。
  • 为什么使用 CMake 而不用 Makefile?
    CMake 提供了跨平台支持和高级特性,而 Makefile 主要适用于单一平台。
  • 如何在 Android Studio 中使用 CMake?
    在 Android Studio 中,可以在项目根目录下创建一个 CMakeLists.txt 文件并使用 Android Studio 集成的 CMake 工具构建项目。
  • CMake 适用于哪些编程语言?
    CMake 主要用于 C/C++ 代码,但也可以支持其他语言,如 Fortran 和 Assembly。
  • 如何解决 CMake 编译错误?
    查看编译错误消息并根据提示检查语法、依赖关系和编译设置。

结论

通过这篇入门指南,我们已经了解了 CMake 在 Android NDK 开发中的基础知识和高级用法。随着不断学习和探索,你可以充分利用 CMake 的强大功能,构建更复杂和高效的原生代码应用。