Skip to content

NDK 与 C++ 构建优化

源:Android NDK 构建

当项目涉及 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 打包流程。