NDK 与 C++ 构建优化
当项目涉及 C/C++ (JNI) 开发时,Gradle 构建时间会因为 CMake 的介入而急剧增加。
1. 核心优化:ABI 过滤
不要在开发阶段编译所有 CPU 架构(arm64, x86, v7a...),这会浪费 75% 的时间。
kotlin
android {
defaultConfig {
ndk {
// 开发阶段仅编译当前真机/模拟器的架构
if (project.hasProperty("devAbi")) {
abiFilters += project.property("devAbi").toString()
} else {
abiFilters += listOf("arm64-v8a", "armeabi-v7a")
}
}
}
}2. CMake 编译参数优化
使用 Ninja (默认已开启) 和 ccache (需自行安装) 来加速 C++ 编译。
kotlin
android {
externalNativeBuild {
cmake {
arguments += "-DANDROID_STL=c++_shared"
// 启用多线程编译
arguments += "-DANDROID_CPP_FEATURES=rtti exceptions"
}
}
}3. 避免全量重新链接
默认情况下,即使你只改了一行 C++ 代码,Gradle 可能会尝试重新链接整个项目。
建议
将独立的 C++ 逻辑拆分为多个 CMake Target,这样只有发生变化的目标才会重新编译。
4. 调试 NDK 任务
运行 ./gradlew externalNativeBuildDebug 可以单独触发 C++ 编译,而不需要走完整个 APK 打包流程。