Gradle同步失败报java.util.zip.ZipException: zip END header not found——Groovy Gradle转Kotlin DSL迁移问题
Gradle同步失败报java.util.zip.ZipException: zip END header not found——Groovy Gradle转Kotlin DSL迁移问题
我刚踩过类似的坑,这个错误大概率和Gradle缓存损坏、依赖包下载不完整,或者Kotlin DSL配置里的细节偏差有关。结合你提供的代码和场景,咱们一步步排查解决:
一、先解决最常见的缓存损坏问题
这个zip头找不到的错误,十有八九是某个依赖包下载到一半中断,导致zip文件损坏了。最快的排查方式是清理Gradle本地缓存:
- 找到你的Gradle用户目录:Mac/Linux是
~/.gradle/caches,Windows是C:\Users\<你的用户名>\.gradle\caches - 删除里面的
modules-2文件夹(这个文件夹存的是下载的依赖包) - 回到Android Studio,重新执行Gradle同步
如果清理缓存后还是报错,再往下看配置里的问题。
二、检查Kotlin DSL配置的细节偏差
对比你提供的Groovy和Kotlin版本的core模块build文件,发现几个容易踩坑的差异:
- targetSdk配置位置错误
原Groovy配置里targetSdk是放在defaultConfig里的,但你转成Kotlin DSL后把它移到了lint和testOptions里,这会导致Android核心配置不完整。正确的写法应该是放回defaultConfig:defaultConfig { minSdk = BuildConfig.minSdk targetSdk = BuildConfig.targetSdk // 移回defaultConfig中 } - minifyEnabled取值不一致
原Groovy里release构建的minifyEnabled false,但你转成Kotlin DSL后改成了isMinifyEnabled = true。如果你的项目之前没开启混淆,这个改动可能触发ProGuard规则或依赖的兼容性问题,建议先保持和原配置一致:release { isMinifyEnabled = false // 和原Groovy配置保持一致 proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } - jvmTarget配置的一致性
原Groovy里用的是BuildConfig.jvmTarget,但Kotlin DSL里你直接写死了JVM_17。虽然如果BuildConfig里的jvmTarget也是17没问题,但最好保持配置逻辑一致,改成从BuildConfig读取:kotlin { compilerOptions { jvmTarget.set(JvmTarget.fromTarget(BuildConfig.jvmTarget)) } }
三、检查Gradle Wrapper的完整性
你的gradle-wrapper.properties里用的是gradle-8.14-bin.zip,有可能wrapper的jar文件损坏了。可以:
- 删除项目根目录下的
gradle/wrapper/gradle-wrapper.jar文件 - 打开终端,执行
./gradlew clean build(Windows用gradlew.bat clean build),Gradle会自动重新下载完整的wrapper文件
四、强制刷新依赖
如果上面的方法都没用,试试强制Gradle跳过缓存,重新下载所有依赖:
在终端执行:
./gradlew --refresh-dependencies sync
五、排查依赖声明的正确性
检查你依赖里的libs.hilt.android.compiler,确认在libs.versions.toml(或者对应的版本管理文件)里这个依赖的版本是正确的。如果不确定,可以临时换成硬编码的版本号测试,比如:
kapt("com.google.dagger:hilt-android-compiler:2.48")
如果这样能同步成功,说明是版本管理文件里的配置有问题。
内容来源于stack exchange
相关产品推荐
相关产品推荐

