升级Robolectric 3.8与SDK 27后遇java.util.zip.ZipException报错
解决Robolectric 3.8 + Android SDK 27的ZipException问题
针对你升级后遇到的java.util.zip.ZipException: error in opening zip file错误,结合你的配置和已尝试的操作,给你几个针对性的排查方向:
1. 检查Android SDK API 27组件是否完整
Robolectric需要读取对应SDK版本的系统资源jar包,如果API 27的平台组件下载不完整或损坏,就会触发这个错误。你可以:
- 打开Android Studio的SDK Manager,确认Android SDK Platform 27和Sources for Android 27已安装
- 或者用命令行强制重新安装:
安装完成后,检查SDK目录下sdkmanager "platforms;android-27" "sources;android-27"platforms/android-27/android.jar是否能正常用压缩软件打开,验证文件完整性。
2. 清理Robolectric本地缓存并指定SDK路径
Robolectric会在本地缓存SDK资源,缓存损坏是常见诱因:
- 删除Robolectric的缓存目录:
- Mac/Linux:
rm -rf ~/.robolectric - Windows:删除
C:\Users\<你的用户名>\.robolectric
- Mac/Linux:
- 在Gradle中明确指定SDK路径,避免Robolectric找不到正确的SDK位置:
android { // 你的原有配置... testOptions { unitTests { includeAndroidResources = true all { systemProperty 'robolectric.sdk.path', System.getenv('ANDROID_HOME') } } } }
3. 强制刷新依赖并检查冲突
你已经试过清理依赖,可以再执行更彻底的依赖刷新:
./gradlew clean build --refresh-dependencies
同时检查测试依赖是否有冲突,执行以下命令查看依赖树:
./gradlew dependencies --configuration testImplementation
重点排查是否有旧版本的Robolectric或其他与SDK 27不兼容的依赖,如有冲突可以用exclude规则排除。
4. 验证IDE配置(如果用Android Studio/IntelliJ运行测试)
IDE缓存或SDK配置错误也可能导致问题:
- 执行
File -> Invalidate Caches / Restart清理IDE缓存 - 检查
File -> Project Structure -> SDKs,确认Android SDK路径指向的是包含API 27的正确目录 - 确保测试运行配置中使用的是项目指定的Gradle版本
5. 尝试升级Robolectric版本
Robolectric 3.8虽然支持SDK 27,但后续小版本可能修复了相关bug,你可以尝试升级到3.8.1,或者直接升级到4.x版本(注意4.x对JUnit的要求是JUnit5,需要调整测试代码结构)。
内容的提问来源于stack exchange,提问作者Pascal Stech
相关产品推荐
相关产品推荐

