Android项目C++构建系统clean任务失败的解决方法咨询
问题
我的Android应用包含C++代码,此前Gradle同步、清理、构建及运行均无异常,直到通过Homebrew安装了最新版CMake(3.24.1)。
相关配置
- CMakeLists.txt:
# Sets the minimum version of CMake required to build the native library. cmake_minimum_required(VERSION 3.24.1)
- 模块级Gradle配置:
kotlinOptions { jvmTarget = '11' } externalNativeBuild { cmake { path file('src/main/cpp/CMakeLists.txt') version '3.24.1' } }
- 项目根Gradle配置:
buildscript { ext { compose_version = '1.3.0-beta02' } dependencies { classpath 'com.google.gms:google-services:4.3.13' } } plugins { id 'com.android.application' version '7.3.0-rc01' apply false id 'com.android.library' version '7.3.0-rc01' apply false id 'org.jetbrains.kotlin.android' version '1.7.0' apply false id 'com.google.dagger.hilt.android' version '2.43.2' apply false } task clean(type: Delete) { delete rootProject.buildDir }
- Android Studio版本:
Android Studio Dolphin | 2021.3.1 RC 1 Build #AI-213.7172.25.2113.8913347, built on August 6, 2022 Runtime version: 11.0.13+0-b1751.21-8125866 x86_64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. macOS 10.15.7 GC: G1 Young Generation, G1 Old Generation Memory: 8192M Cores: 12 Registry: external.system.auto.import.disabled=true ide.text.editor.with.preview.show.floating.toolbar=false Non-Bundled Plugins: com.android.aas (3.5.1)
错误现象
Gradle同步、构建、刷新关联C++项目均正常,但执行项目清理时多个externalNativeBuildClean任务失败,错误提示找不到/usr/local/Cellar/cmake/3.23.2/bin/cmake,典型错误日志如下:
> Task :shared:covert:externalNativeBuildCleanDevelopmentDebug FAILED Clean native-lib-armeabi-v7a C/C++: /bin/sh: /usr/local/Cellar/cmake/3.23.2/bin/cmake: No such file or directory C/C++: ninja: error: rebuilding 'build.ninja': subcommand failed
失败详情显示清理时Ninja尝试调用旧版本CMake路径,但该版本已被Homebrew更新覆盖。另外,Android Studio内置CMake最高仅支持3.22.1版本。
解决方案
方案1:清理旧构建缓存
旧构建缓存中记录了过时的CMake路径,直接删除缓存即可:
- 手动删除模块下的
.cxx目录(示例路径:/Users/frank/github/mobile-android-showcase/shared/covert/.cxx) - 或在终端执行命令:
./gradlew clean(若AS内执行clean失败,优先用终端执行)
方案2:切换到Android Studio内置CMake
由于AS仅支持最高3.22.1版本的CMake,调整配置统一使用内置版本:
- 修改CMakeLists.txt中的最低版本要求:
cmake_minimum_required(VERSION 3.22.1)
- 修改模块级Gradle中的CMake版本:
externalNativeBuild { cmake { path file('src/main/cpp/CMakeLists.txt') version '3.22.1' // 改为AS支持的最高版本 } }
- 同步Gradle后重新执行清理操作
方案3:创建软链接兼容旧路径
若必须使用Homebrew安装的CMake 3.24.1,可为旧路径创建软链接指向新版本:
- 若旧版本目录不存在,先创建:
mkdir -p /usr/local/Cellar/cmake/3.23.2/bin
- 创建软链接:
ln -s /usr/local/Cellar/cmake/3.24.1/bin/cmake /usr/local/Cellar/cmake/3.23.2/bin/cmake
内容的提问来源于stack exchange,提问作者Hector
相关产品推荐
相关产品推荐

