返回

CMake 助力 Android NDK 开发:从入门到精通

Android

CMake 助力 Android NDK 开发

随着 Android 应用复杂度的不断提升,引入 C/C++ 代码以提升性能和功能成为了常见需求。Android NDK(Native Development Kit)正是在此背景下诞生的,它允许您在 Android 应用中引入 C/C++ 代码,以提高运行速度、增强稳定性、扩展底层库等。

而 CMake 是一个跨平台的构建系统,在 Android NDK 中扮演着至关重要的角色。CMake 通过读取 CMakeLists.txt 文件中的指令,生成相应的构建脚本,从而自动化了整个构建过程。使用 CMake,您可以更轻松地管理项目依赖、配置构建选项、进行编译和调试。

CMake 的优势

  • 跨平台支持 :CMake 可以在 Windows、macOS、Linux 等多种平台上运行,这使得它成为 Android NDK 开发的理想选择,您不必担心构建脚本与平台不兼容的问题。
  • 依赖管理 :CMake 可以轻松管理项目依赖,您只需在 CMakeLists.txt 文件中声明依赖的库或头文件,CMake 会自动处理依赖关系。
  • 编译优化 :CMake 提供了多种编译选项,可以根据您的需求优化编译过程,例如,您可以指定编译器、优化级别、编译标志等。
  • 调试支持 :CMake 支持多种调试工具,如 GDB 和 LLDB,可以帮助您轻松地调试 C/C++ 代码。
  • 性能提升 :CMake 可以通过各种方式提高编译性能,例如,它可以并行编译代码,充分利用多核处理器的优势。

准备工作

在开始使用 CMake 构建 Android NDK 项目之前,您需要安装以下软件:

  • Android Studio 2.2 或更高版本
  • CMake 3.10 或更高版本
  • Android NDK r16 或更高版本

创建项目

要创建新的 Android NDK 项目,请按照以下步骤操作:

  1. 在 Android Studio 中,创建一个新的 Android 项目。
  2. 在项目中创建一个名为 app/src/main/cpp 的目录。
  3. app/src/main/cpp 目录中创建一个名为 CMakeLists.txt 的文件。
  4. CMakeLists.txt 文件中添加以下代码:
cmake_minimum_required(VERSION 3.10)

set(CMAKE_CXX_STANDARD 11)

add_library(hello SHARED
        hello.cpp)

find_library(log-lib log)
target_link_libraries(hello ${log-lib})

install(TARGETS hello
        DESTINATION lib)
  1. app/src/main/cpp 目录中创建一个名为 hello.cpp 的文件,并添加以下代码:
#include <jni.h>
#include <string>

extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_hello_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}
  1. app/build.gradle 文件中添加以下代码:
apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    buildToolsVersion "28.0.3"

    defaultConfig {
        applicationId "com.example.hello"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"

        externalNativeBuild {
            cmake {
                cppFlags "-std=c++11"
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')
        }
    }
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
}
  1. 运行 gradlew assembleDebug 命令来构建项目。

使用 CMake 构建 Android NDK 项目

在完成项目创建之后,您就可以使用 CMake 来构建 Android NDK 项目了。要构建项目,请按照以下步骤操作:

  1. 打开 Android Studio。
  2. 在项目中,右键单击 app 模块,然后选择 Build > Make Project
  3. 等待项目构建完成。

调试 CMake 构建的 Android NDK 项目

要调试 CMake 构建的 Android NDK 项目,请按照以下步骤操作:

  1. 在 Android Studio 中,打开 Run > Debug 菜单。
  2. Debug Configuration 对话框中,选择要调试的设备或模拟器。
  3. Debugger 部分,选择 LLDB
  4. 点击 Debug 按钮开始调试。

性能优化

CMake 提供了几种方法来优化编译性能。您可以使用以下方法来提高编译速度:

  • 使用并行编译:CMake 可以并行编译代码,充分利用多核处理器的优势。要启用并行编译,请在 CMakeLists.txt 文件中添加以下代码:
set(CMAKE_CXX_COMPILER_LAUNCHER "ccmake -j8")
  • 使用预编译头文件:预编译头文件可以减少编译时间。要使用预编译头文件,请在 CMakeLists.txt 文件中添加以下代码:
set(CMAKE_CXX_USE_PRECOMPILED_HEADER TRUE)
set(CMAKE_CXX_PRECOMPILED_HEADER hello.h)
  • 使用编译缓存:编译缓存可以存储编译过的代码,以避免重复编译。要使用编译缓存,请在 CMakeLists.txt 文件中添加以下代码:
set(CMAKE_USE_BUILD_CACHE ON)

总结

CMake 是一个强大的工具,可以帮助您轻松地构建 Android NDK 项目。通过使用 CMake,您可以轻松地管理依赖、配置编译选项、进行编译和调试。如果您正在开发 Android 应用,那么 CMake 是您必不可少的工具。