Cordova Android项目修改cdv-gradle-config.json配置后命令行运行恢复默认的解决方案咨询
解决Cordova构建时Gradle配置被重置的问题
我完全理解你的困扰——每次用cordova run android命令时,手动修改的cdv-gradle-config.json和gradle-wrapper.properties总会被重置回默认值,这是因为Cordova的构建流程会自动重新生成这些平台配置文件,覆盖你的手动修改。下面是几种靠谱的解决方案,按推荐优先级排序:
1. 通过config.xml配置(官方推荐)
这是最稳妥的方式,Cordova官方支持通过config.xml的偏好设置来定义这些Gradle相关参数,构建时会自动读取这些值生成配置文件,不会被覆盖。
在项目根目录的config.xml中,找到<platform name="android">节点,添加以下preference配置:
<platform name="android"> <!-- 设置Android Gradle Plugin(AGP)版本 --> <preference name="AndroidGradlePluginVersion" value="7.0.0" /> <!-- 设置Gradle分发版本 --> <preference name="GradleVersion" value="7.4" /> <!-- 其他你需要自定义的配置也可以在这里设置 --> <preference name="MinSdkVersion" value="22" /> <preference name="TargetSdkVersion" value="30" /> <preference name="KotlinVersion" value="1.6.10" /> </platform>
添加完成后,执行cordova clean && cordova run android,Cordova会自动根据这些偏好生成正确的cdv-gradle-config.json和gradle-wrapper.properties。
2. 使用Cordova构建钩子自动修改配置
如果有些配置无法通过config.xml直接设置,你可以用Cordova的钩子脚本,在构建流程中自动修改目标文件。
步骤:
- 在项目根目录创建
hooks/after_prepare文件夹(如果不存在的话); - 在该文件夹下创建一个Node.js脚本,比如
01_modify_gradle_config.js,内容如下:
const fs = require('fs'); const path = require('path'); module.exports = function(context) { // 路径指向Android平台下的cdv-gradle-config.json const gradleConfigPath = path.join(context.opts.projectRoot, 'platforms/android/cdv-gradle-config.json'); let configData = JSON.parse(fs.readFileSync(gradleConfigPath, 'utf8')); // 修改AGP版本和其他需要的配置 configData.AGP_VERSION = '7.0.0'; configData.GRADLE_VERSION = '7.4'; fs.writeFileSync(gradleConfigPath, JSON.stringify(configData, null, 2)); // 修改gradle-wrapper.properties的分发URL const wrapperConfigPath = path.join(context.opts.projectRoot, 'platforms/android/gradle/wrapper/gradle-wrapper.properties'); let wrapperContent = fs.readFileSync(wrapperConfigPath, 'utf8'); wrapperContent = wrapperContent.replace( /distributionUrl=.*/, 'distributionUrl=https\\://services.gradle.org/distributions/gradle-7.4-bin.zip' ); fs.writeFileSync(wrapperConfigPath, wrapperContent); };
- 给脚本添加可执行权限(Linux/macOS系统):
chmod +x hooks/after_prepare/01_modify_gradle_config.js
之后每次执行cordova run android或cordova prepare时,这个钩子会在prepare阶段完成后自动修改配置文件,不会被Cordova的默认流程覆盖。
3. 修改Cordova Android平台模板(不推荐)
这个方法可以修改Cordova生成Android平台时的默认模板,但缺点是后续更新Cordova Android平台时,你的修改会被覆盖,适合不需要频繁更新平台的场景。
- 找到本地Cordova Android平台的安装目录,比如在macOS/Linux下通常是
~/.cordova/lib/npm_cache/cordova-android/[版本号]/package/templates; - 修改模板中的
gradle/cdv-gradle-config.json和gradle/wrapper/gradle-wrapper.properties文件,替换成你需要的默认值; - 重新执行
cordova platform remove android && cordova platform add android,新生成的平台就会用你修改后的默认配置。
重要注意事项
- 确保AGP版本和Gradle版本兼容:比如AGP 7.0.x对应Gradle 7.0+,AGP 7.4对应Gradle 7.5+,不兼容的版本会直接导致构建失败;
- 如果你之前手动修改过平台目录下的文件,建议先移除再重新添加Android平台,避免旧配置残留。
内容的提问来源于stack exchange,提问作者Moti Bartov
相关产品推荐
相关产品推荐

