如何解决Ionic Cordova安卓构建因appcompat版本过高失败问题
可行解决方案
方案1:使用Cordova after_prepare钩子自动覆盖project.properties配置
该方案是兼容性最高、最适配CI环境的解法,会在每次Cordova生成安卓平台配置文件后自动修改对应规则,无需手动干预构建流程:
- 在项目根目录创建
hooks/after_prepare/001_fix_appcompat_version.js文件,写入以下内容:
const fs = require('fs'); const path = require('path'); module.exports = function(context) { const projectPropertiesPath = path.join(context.opts.projectRoot, 'platforms/android/project.properties'); if (fs.existsSync(projectPropertiesPath)) { let content = fs.readFileSync(projectPropertiesPath, 'utf8'); // 替换动态版本规则为固定版本 content = content.replace( /cordova\.system\.library\.\d+=androidx\.appcompat:appcompat:1\.\+/g, 'cordova.system.library.3=androidx.appcompat:appcompat:1.3.1' ); fs.writeFileSync(projectPropertiesPath, content, 'utf8'); } }
- 非Windows环境下给钩子文件添加执行权限:
chmod +x hooks/after_prepare/001_fix_appcompat_version.js
配置完成后不管是本地还是Ionic CI环境,每次构建都会自动修正project.properties中的appcompat版本规则。
方案2:修正Gradle强制锁定版本规则
你之前的规则失效是因为代码位置写错了,configurations.all不能放在repositories块内,正确的config-extras.gradle内容如下:
allprojects { configurations.all { resolutionStrategy { force 'androidx.appcompat:appcompat:1.3.1' } } repositories { // 原有仓库配置保留即可,不需要在里面加版本锁定规则 } }
修改后保留config.xml中对该gradle文件的引用即可生效。
方案3:升级compileSdk版本适配新依赖
如果项目对安卓版本兼容性要求允许,可直接在config.xml中添加以下配置,将编译版本升级到31适配新版appcompat,无需锁定版本:
<preference name="android-compileSdkVersion" value="31" /> <preference name="android-targetSdkVersion" value="31" />
方案4:修改引入依赖的插件配置
如果该动态版本规则是由第三方Cordova插件引入的,可直接fork对应插件,修改其plugin.xml中androidx.appcompat:appcompat:1.+的配置为固定1.3.1版本,之后项目依赖你修改后的fork版本即可,每次构建都会自动生成固定版本的配置。
内容的提问来源于stack exchange,提问作者Yoan Asdrubal Quintana Ramírez
相关产品推荐
相关产品推荐

