Android Studio版本迁移后开启shrinkResources发布打包失败求助
解决Android Studio迁移后shrinkReleaseRes执行失败的问题
排查与解决步骤
1. 检查自动生成的XML文件
资源收缩会扫描build/generated目录下的自动生成资源,这些文件可能存在格式问题:
- 手动打开
build/generated/res等子目录下的XML文件,查看文件开头是否有空格、特殊字符或BOM头(UTF-8编码的隐藏前缀)。 - 若发现异常文件,执行
./gradlew clean删除构建目录后重新生成,若问题依旧,检查生成该文件的插件或配置是否存在兼容性问题。
2. 排查第三方依赖库的XML资源
部分第三方库可能包含格式不规范的XML资源,触发解析错误:
- 执行
./gradlew app:dependencies导出依赖树,排查近期新增或更新的依赖。 - 临时注释掉可疑依赖,重新构建测试,定位到问题库后,尝试升级该库版本或替换为替代库。
3. 修复XML文件的BOM头问题
即使XML声明为UTF-8,部分编辑器保存时会添加UTF-8 BOM头,导致解析器报错:
- 用Notepad++或VS Code打开XML文件,将编码切换为
UTF-8 without BOM后重新保存。 - 批量检测BOM头文件:在终端执行
grep -r $'\xef\xbb\xbf' app/src/main/res/(Linux/macOS),找到带BOM头的文件并修复。
4. 检查资源收缩配置文件
若自定义了资源保留规则,需确保配置文件格式正确:
- 查看
res/raw/keep.xml,确认文件开头无多余字符,XML语法正确(比如根标签为<?xml version="1.0" encoding="utf-8"?><resources>...</resources>)。 - 尝试添加临时资源收缩规则,在
build.gradle的release构建类型中添加:
然后在resourceProguardFiles 'resource-rules.pro'resource-rules.pro中写入:
重新构建测试,若成功再逐步缩小规则范围定位问题资源。keep public class * extends android.content.res.Resources
5. 匹配AGP与Android Studio版本
Android Studio版本需对应匹配的Android Gradle Plugin(AGP)版本:
- Electric Eel对应AGP 7.4.x,Dolphin对应AGP 7.3.x。修改项目根目录
build.gradle中的AGP版本:
同步后重新构建。dependencies { classpath 'com.android.tools.build:gradle:7.4.2' // 适配Electric Eel // 或 classpath 'com.android.tools.build:gradle:7.3.1' // 适配Dolphin }
6. 启用详细日志定位问题文件
执行以下命令获取资源收缩的详细日志,精准定位报错的XML文件:
./gradlew app:shrinkReleaseRes --info
日志中会显示触发ParseError的具体文件路径,针对该文件进行修复即可。
内容的提问来源于stack exchange,提问作者AmiiiR
相关产品推荐
相关产品推荐

