返回
CMake 助力 Android NDK 开发:从入门到精通
Android
2024-01-21 15:20:09
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 项目,请按照以下步骤操作:
- 在 Android Studio 中,创建一个新的 Android 项目。
- 在项目中创建一个名为
app/src/main/cpp
的目录。 - 在
app/src/main/cpp
目录中创建一个名为CMakeLists.txt
的文件。 - 在
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)
- 在
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());
}
- 在
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'
}
- 运行
gradlew assembleDebug
命令来构建项目。
使用 CMake 构建 Android NDK 项目
在完成项目创建之后,您就可以使用 CMake 来构建 Android NDK 项目了。要构建项目,请按照以下步骤操作:
- 打开 Android Studio。
- 在项目中,右键单击
app
模块,然后选择Build
>Make Project
。 - 等待项目构建完成。
调试 CMake 构建的 Android NDK 项目
要调试 CMake 构建的 Android NDK 项目,请按照以下步骤操作:
- 在 Android Studio 中,打开
Run
>Debug
菜单。 - 在
Debug Configuration
对话框中,选择要调试的设备或模拟器。 - 在
Debugger
部分,选择LLDB
。 - 点击
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 是您必不可少的工具。