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配置
- 修改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 } } }
- 确认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等
- 清理并重新构建
先执行命令清理构建缓存:
./gradlew clean
然后重新构建项目,此时会使用ndkBuild任务来编译JNI代码,彻底摆脱那个废弃的旧任务。
这样应该就能解决找不到<string>头文件的问题了,毕竟现在官方推荐的NDK构建方式就是externalNativeBuild(支持ndkBuild和CMake),旧的compileNdk系列任务早就该被淘汰啦。
内容的提问来源于stack exchange,提问作者Eilir
相关产品推荐
相关产品推荐

