Android Studio 3.1.2升级后遇EOCD Signature not found问题求助
解决Android Studio升级3.1.2后出现的EOCD Signature not found问题
我之前升级Android Studio版本时也碰到过一模一样的问题,这个错误本质是JNI库合并时读取损坏的Zip文件导致的,和multidex的关联其实是升级后Gradle插件对JNI文件处理逻辑变化引发的。给你几个亲测有效的解决步骤:
1. 彻底清理缓存与构建产物
这是最容易见效的第一步,很多时候都是缓存文件损坏引发的问题:
- 执行命令行清理:Windows下运行
gradlew clean,Mac/Linux运行./gradlew clean - 删除项目根目录下的
.gradle文件夹和app/build目录 - 重启Android Studio,点击顶部菜单栏的「File -> Sync Project with Gradle Files」重新同步项目
2. 检查并修复损坏的依赖库
从错误日志能看到,问题出在 adal-1.13.2.aar 的JNI目录下:
java.io.IOException: Failed to read zip file 'C:\Users\袛懈屑邪\.gradle\caches\transforms-1\files-1.1\adal-1.13.2.aar\0609b8bbdaebc86f749d40642893ae87\jni'
- 手动定位到这个目录,尝试打开其中的Zip文件,如果无法正常打开说明缓存已损坏,直接删除整个
adal-1.13.2.aar对应的缓存文件夹 - 建议把adal库升级到最新稳定版本,旧版本的AAR可能和3.1.2版本的Gradle插件存在兼容性问题
3. 调整JNI打包配置
在 app/build.gradle 中添加打包选项,避免合并异常的JNI文件:
android { defaultConfig { multiDexEnabled true // 确保你已经开启了multidex // 其他配置... } packagingOptions { pickFirst '**/*.so' // 优先选择第一个出现的so文件,避免冲突 // 如果能定位到具体损坏的so文件,可以直接排除 // exclude '**/libadal.so' } }
同时确认multidex配置完整:
- 如果你的Application没有继承
MultiDexApplication,需要在attachBaseContext方法中手动初始化:
@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
4. 调整Gradle插件版本
3.1.2版本的Android Gradle插件存在一些已知的JNI合并问题,你可以尝试:
- 升级到同系列的稳定版本,比如3.1.4
- 或者暂时降级到3.0.1版本,看是否能绕过这个错误
附错误日志详情:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformNativeLibsWithMergeJniLibsForArmAmazonfiretvfreeDebug'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70) at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62) at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97) at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87) at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98) at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:626) at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) at java.lang.Thread.run(Thread.java:745) Caused by: java.io.UncheckedIOException: java.io.IOException: Failed to read zip file 'C:\Users\袛懈屑邪\.gradle\caches\transforms-1\files-1.1\adal-1.13.2.aar\0609b8bbdaebc86f749d40642893ae87\jni'. at com.android.builder.merge.LazyIncrementalFileMergerInputs.load(LazyIncrementalFileMergerInputs.java:88) at com.android.builder.merge.LazyIncrementalFileMergerInputs.lambda$fromNew$0(LazyIncrementalFileMergerInputs.java:59) at com.android.apkzlib.utils.CachedSupplier.get(CachedSupplier.java:81) at com.android.builder.merge.LazyIncrementalFileMergerInput.lambda$new$2(LazyIncrementalFileMergerInput.java:138) at com.android.apkzlib.utils.CachedSupplier.get(CachedSupplier.java:81) at com.android.builder.merge.LazyIncrementalFileMergerInput.open(LazyIncrementalFileMergerInput.java:225) at com.android.builder.mer
内容的提问来源于stack exchange,提问作者Dmitry Zaganich
相关产品推荐
相关产品推荐

