已设SplashScreen为none,如何自动移除Cordova Android构建的启动屏资源?
我之前也踩过这个坑——明明在config.xml里设置了<preference name="SplashScreen" value="none"/>,但启动屏资源还是顽固地留在APK里,导致安装包体积虚高。手动删除platforms/android/res下的启动屏文件虽然有效,但每次构建都要手动操作太麻烦。下面几个自动解决方案亲测可行:
方法1:使用Cordova钩子脚本(推荐)
Cordova的钩子脚本可以在构建流程的特定阶段自动执行自定义操作,我们可以利用after_prepare钩子来删除启动屏资源:
在项目根目录创建钩子文件:
新建hooks/after_prepare/01_remove_splash_resources.js(如果hooks/after_prepare目录不存在,先创建它)写入以下脚本内容:
#!/usr/bin/env node const fs = require('fs'); const path = require('path'); // 定位Android资源目录 const androidResDir = path.join(__dirname, '../../platforms/android/res'); // 列出所有要删除的启动屏资源(根据你的实际文件命名调整) const splashFiles = [ 'drawable-hdpi/screen.png', 'drawable-ldpi/screen.png', 'drawable-mdpi/screen.png', 'drawable-xhdpi/screen.png', 'drawable-xxhdpi/screen.png', 'drawable-xxxhdpi/screen.png', // 如果有其他命名的启动屏文件,比如splash.png,也添加进来 ]; // 遍历删除文件 splashFiles.forEach(filePath => { const fullPath = path.join(androidResDir, filePath); if (fs.existsSync(fullPath)) { fs.unlinkSync(fullPath); console.log(`✅ 已删除启动屏资源:${fullPath}`); } });
- 给脚本添加执行权限:
在终端运行:chmod +x hooks/after_prepare/01_remove_splash_resources.js
之后每次执行cordova build android或cordova prepare android时,脚本都会自动清理掉指定的启动屏资源,无需手动操作。
方法2:彻底移除启动屏插件
如果你的项目之前安装过cordova-plugin-splashscreen,即使设置了SplashScreen为none,插件可能仍会自动复制资源。可以先卸载插件:
cordova plugin remove cordova-plugin-splashscreen
同时确保config.xml中没有任何<splash>标签,只保留<preference name="SplashScreen" value="none"/>。不过这个方法有时候不够彻底,因为部分Cordova模板可能默认携带启动屏资源,所以配合钩子脚本使用更稳妥。
方法3:修改Android构建脚本(临时方案)
你可以直接修改platforms/android/build.gradle,添加一个删除资源的任务:
// 添加删除启动屏资源的任务 task removeSplashResources(type: Delete) { delete fileTree(dir: 'res', include: 'drawable-*/screen.png') } // 让构建前先执行这个任务 preBuild.dependsOn removeSplashResources
但注意:如果你重新添加Android平台(cordova platform remove android && cordova platform add android),修改的build.gradle会被覆盖,需要重新配置,所以这个方法适合临时场景,长期使用还是推荐钩子脚本。
内容的提问来源于stack exchange,提问作者zhongshu

