Jenkins构建出现Archive is toast错误,求更优解决方案及错误解析
嘿,我之前踩过完全一样的坑!先帮你把这个错误掰明白,再给几个比删整个工作区高效得多的解决办法。
错误含义解析
咱们先拆解下日志里的关键信息:
E/zip (57580): error during crunch - archive is toast:这里的「crunch」是Android打包工具(比如aapt或者build-tools里的资源压缩组件)对资源文件(比如图片、布局)进行压缩处理的环节;「archive is toast」是很直白的说法——某个Zip格式的归档文件彻底损坏了,没法正常读取或写入。failed opening/creating 'debug.apk' as Zip file:这是连锁反应,因为前面的资源压缩环节出了问题,导致生成最终debug.apk时,工具没法把它当成有效的Zip文件来创建或打开,直接导致mobile:generateAPKs任务失败。
更简洁的解决方案
不用每次都删整个工作区,试试从轻到重的这几个办法:
最省事:只清理Gradle构建缓存
在Jenkins构建任务里加一个前置执行步骤,运行以下命令:# 清理全局Gradle构建缓存 ./gradlew cleanBuildCache # 或者只清理当前项目的构建产物(更常用) ./gradlew clean这个操作只会删掉项目里
build目录下的缓存和中间产物,比删整个工作区快好几倍,大部分情况下就能解决问题。针对性删除损坏文件
如果clean不管用,大概率是某个第三方库的资源包(.aar)或者本地压缩资源(比如损坏的.9.png)出了问题。可以让Jenkins构建前执行:# 删除项目里所有可能损坏的归档文件(排除正式打包的libs目录) find . -name "*.apk" -o -name "*.zip" -o -name "*.aar" | grep -v "build/libs" | xargs rm -f或者更精准一点,直接删掉app模块的build目录:
rm -rf app/build终极小招:重启Jenkins构建节点
如果上面的办法都没用,可能是Jenkins节点的文件系统缓存或者文件句柄占用了损坏的文件,重启对应的构建节点,让系统释放掉这些占用,再重新构建基本就能解决。
预防小贴士
- 给Jenkins构建任务默认加上
./gradlew clean前置步骤,不用删整个工作区,定期清理构建缓存就能避免大部分这类问题。 - 尽量用稳定版的Android SDK Build Tools(比如33.0.1、34.0.0),别轻易尝鲜预览版,这类压缩相关的bug在预览版里挺常见的。
- 监控Jenkins工作区所在磁盘的空间,磁盘满了会导致文件写入不完整,很容易出现这类归档损坏的问题。
内容的提问来源于stack exchange,提问作者Alex Lapeña
相关产品推荐
相关产品推荐

