升级Cordova Android环境后Gradle编译失败,涉及版本冲突与Google Services插件版本重置问题
我完全理解你现在的困惑——升级Cordova环境后遇到的Gradle版本冲突和插件版本重置问题确实很棘手,我来一步步帮你拆解和解决这些问题:
一、Gradle版本冲突的原因:全局安装 vs Cordova项目自带Wrapper
你提到自己装了Gradle 7.6.5,但错误里却出现了Gradle 8.7的相关提示,这是因为Cordova-Android 13.0会自动为项目指定使用的Gradle版本,而且它用的是项目内的Gradle Wrapper,完全不会依赖你全局安装的Gradle版本。
你在cdv-gradle-config.json里看到的"GRADLE_VERSION":"8.7"就是Cordova自动生成的核心配置,这个文件每次执行cordova build或cordova prepare时都会重新生成,所以项目实际运行的是Gradle 8.7,和你全局的7.6.5无关。错误里的Deprecated提示也是针对Gradle 8.7的特性,不用纠结全局版本的问题。
二、解决mapDebugSourceSetPaths任务失败的问题
这个错误的核心是旧版本的Google Services插件和Cordova-Android 13.0搭配的AGP(Android Gradle Plugin)8.3.0不兼容。你修改cdv-gradle-config.json里的插件版本后被重置,是因为这个文件是自动生成的,手动修改会被覆盖,得用正确的方式来修改版本:
方法1:升级冲突的插件(优先推荐)
你项目里的cordova-plugin-firebasex硬编码了com.google.gms:google-services:4.3.10,这个版本太老,和AGP 8.x不兼容。建议直接升级这个插件到最新版本,新版插件通常会适配更高版本的Google Services和AGP,能直接解决版本冲突问题。
执行升级命令:
cordova plugin remove cordova-plugin-firebasex cordova plugin add cordova-plugin-firebasex@latest
方法2:用Cordova钩子自动修改版本(如果暂时无法升级插件)
如果因为某些原因不能升级插件,可以通过Cordova的钩子脚本,在每次构建前自动修改相关文件里的Google Services版本号,避免手动修改被覆盖:
- 在项目根目录创建
hooks文件夹,然后新建一个update-google-services-version.js脚本,内容如下:
const fs = require('fs'); const path = require('path'); module.exports = function(context) { // 修改app/build.gradle中的Google Services版本 const appBuildPath = path.join(context.opts.projectRoot, 'platforms/android/app/build.gradle'); let appBuildContent = fs.readFileSync(appBuildPath, 'utf8'); // 替换自动生成的版本号为4.4.2 appBuildContent = appBuildContent.replace(/com.google.gms:google-services:\d+\.\d+\.\d+/, 'com.google.gms:google-services:4.4.2'); fs.writeFileSync(appBuildPath, appBuildContent); // 修改cordova-plugin-firebasex中的硬编码版本 const firebasexBuildPath = path.join(context.opts.projectRoot, 'platforms/android/cordova-plugin-firebasex/myapp-build.gradle'); if (fs.existsSync(firebasexBuildPath)) { let firebasexContent = fs.readFileSync(firebasexBuildPath, 'utf8'); firebasexContent = firebasexContent.replace(/com.google.gms:google-services:4\.3\.10/, 'com.google.gms:google-services:4.4.2'); fs.writeFileSync(firebasexBuildPath, firebasexContent); } };
- 在项目的
config.xml里注册这个钩子,让它在每次prepare后执行:
<hook type="after_prepare" src="hooks/update-google-services-version.js" />
之后再执行cordova build android,脚本会自动帮你修改版本号,避免被Cordova覆盖。
三、额外的检查点
- 确认项目里其他插件有没有硬编码旧版本的Google Services或Gradle配置,这些都可能引发类似的冲突;
- 如果你之前手动修改过
platforms/android下的任何文件,建议先删除platforms和plugins文件夹,重新执行cordova prepare,确保环境干净。
内容来源于stack exchange

