You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio构建NDK项目报错:无法找到<string>头文件

解决NDK引入C++标准库头文件后构建错误的问题

你这明显是踩中了Android Gradle Plugin旧版NDK集成的坑——那个提示“NDK集成已废弃”的compileDebugNdk任务就是问题根源!

核心原因

compileDebugNdk是AGP早期的NDK构建任务,现在已经被官方彻底废弃,它完全不会正确读取你在Android.mk/Application.mk里配置的STL参数。哪怕你已经在这些文件里明确指定了STL库,这个旧任务也会直接忽略这些配置,导致找不到<string>这类C++标准库头文件;而你自定义的ndkBuild任务是直接调用NDK原生的ndk-build工具,能正常解析你的STL配置,所以可以顺利编译。

解决方案:禁用旧任务,改用官方推荐的externalNativeBuild配置

  1. 修改Module的build.gradle配置
    移除旧的android.ndk相关配置,添加externalNativeBuild来指定你的Android.mk路径,同时直接禁用废弃的compileDebugNdk任务:
android {
    compileSdkVersion 33 // 替换成你项目的实际版本
    defaultConfig {
        applicationId "com.your.package.name"
        minSdkVersion 21 // 替换成你项目的实际版本
        targetSdkVersion 33
        versionCode 1
        versionName "1.0"
    }

    // 配置externalNativeBuild,关联你的Android.mk文件
    externalNativeBuild {
        ndkBuild {
            path file("src/main/jni/Android.mk") // 替换成你的Android.mk实际路径
        }
    }

    // 禁用所有带Ndk的compile废弃任务
    tasks.whenTaskAdded { task ->
        if (task.name.startsWith("compile") && task.name.contains("Ndk")) {
            task.enabled = false
        }
    }
}
  1. 确认Application.mk的STL配置正确
    确保你的Application.mk里明确指定了STL库,比如:
APP_STL := c++_shared // 或者c++_static,根据你的需求选择动态/静态库
APP_CPPFLAGS += -std=c++17 // 对应你使用的C++版本,比如c++11/c++14/c++17
APP_ABI := all // 或者指定需要的ABI,比如armeabi-v7a,arm64-v8a等
  1. 清理并重新构建
    先执行命令清理构建缓存:
./gradlew clean

然后重新构建项目,此时会使用ndkBuild任务来编译JNI代码,彻底摆脱那个废弃的旧任务。

这样应该就能解决找不到<string>头文件的问题了,毕竟现在官方推荐的NDK构建方式就是externalNativeBuild(支持ndkBuild和CMake),旧的compileNdk系列任务早就该被淘汰啦。

内容的提问来源于stack exchange,提问作者Eilir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:06:11