Android Studio – java.io.IOException:无法生成v1签名

在3.0 Canary 4之后,我的Android Studio更新到所有新版本后,我得到这个错误。(我使用v3.0,因为它速度更快,而且没有必要插入Kotlin。)

它看起来像构建流的问题,它不能生成或签署我的APK文件的调试和发行版本。

我也尝试删除我的debug.keystore ,重新启动AndroidStudio和系统(!!!),但它并没有解决。

这是一个完整的Gradle日志:

失败:生成失败,出现异常。

  • 出了什么问题:执行任务失败':chris-app:packageDemoDebug'。

    java.io.IOException:无法生成v1签名

  • 试试:运行–info或–debug选项来获得更多的日志输出。

  • 异常是:org.gradle.api.tasks.TaskExecutionException:任务':chris-app:packageDemoDebug'的执行失败。 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)在org.gradle.api.internal的org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)上的.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64) .tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)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.DefaultTaskGraphExeter $ $ EventFiringTaskWorker $ 1.run(DefaultTaskGraphExecuter.java:243)at org.gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:在org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)org.gradle.internal.progress .DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)at org.gradle.execution.taskgraph.DefaultTaskGraphExeterter $ EventFiringTaskWo 在org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:$)上执行org.gradle.execution.taskgraph.DefaultTaskGraphExeter $ $ EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:225) 124)在org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker.access $ 200(DefaultTaskPlanExecutor.java:80)在org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker $ 1.execute(DefaultTaskPlanExecutor.java:105)在org.gradle .execute.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker $ 1.execute(DefaultTaskPlanExecutor.java:99)at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625)at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask( DefaultTaskExecutionPlan.java:580)在org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99)org.gradle.int ernal.concurrent.ExecutorPolicy $ CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)at org.gradle.internal.concurrent.ManagedExecutorImpl $ 1.run(ManagedExecutorImpl.java:46)at org.gradle.internal.concurrent.ThreadFactoryImpl $ ManagedThreadRunnable.run (ThreadFactoryImpl.java:55)引起的:org.gradle.tooling.BuildException:java.io.IOException:无法在com.android.build.gradle.internal.scope.OutputScope.lambda上生成v1签名$ parallelForEachOutput $ 10(OutputScope .java:240)at com.android.build.gradle.internal.scope.OutputScope.parallelForEachOutput(OutputScope.java:235)at com.android.build.gradle.internal.scope.OutputScope.parallelForEachOutput(OutputScope.java:196 )com.android.build.gradle.internal.scope.OutputScope.parallelForEachOutput(OutputScope.java:180)at com.android.build.gradle.tasks.PackageAndroidArtifact.doFullTask​​Action(PackageAndroidArtifact.java:466)at com.android。在org.gra上build.gradle.internal.tasks.IncrementalTask​​.taskAction(IncrementalTask​​.java:80) 在org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore中的dle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)$ IncrementalTask​​Action.doExecute(DefaultTaskClassInfoStore.java:168)。 project.taskfactory.DefaultTaskClassInfoStore $ StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore $ StandardTaskAction.execute(DefaultTaskClassInfoStore.java:121)at org.gradle.api.internal。 tasks.execution.ExecuteActionsTaskExecuter $ 1.run(ExecuteActionsTaskExecuter.java:122)at org.gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)at org.gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute (DefaultBuildOperationExecutor.java:328)在org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)org.gradle.internal.prog 在org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExeter上的org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111)处的缺省构建操作.Executor.run(DefaultBuildOperationExecutor.java:107)。 executeActions(ExecuteActionsTaskExecuter.java:92)… 27 more更多信息:java.lang.RuntimeException:java.io.IOException:无法生成v1签名导致:java.io.IOException:无法在com生成v1签名。 android.apkzlib.sign.SigningExtension.onOutputZipReadyForUpdate(SigningExtension.java:297)at com.android.apkzlib.sign.SigningExtension.access $ 200(SigningExtension.java:55)at com.android.apkzlib.sign.SigningExtension $ 1.lambda $在com.android.apkzlib.zip.ZFile.notify(ZFile.java:2099)上的com.android.apkzlib.zip.ZFile.update(ZFile.java:871)前更新$ 2(SigningExtension.java:175)。 android.apkzlib.zip.ZFile.close(ZFile.java:1161)at com.android.apkzlib.zfile.ApkZFileCreator.close(ApkZFileCreator .java:172)com.google.common.io.Closer.close(Closer.java:216)at com.android.builder.internal.packaging.IncrementalPackager.close(IncrementalPackager.java:332)at com.android。 build.gradle.tasks.PackageAndroidArtifact.doTask(PackageAndroidArtifact.java:698)at com.android.build.gradle.tasks.PackageAndroidArtifact.splitFullAction(PackageAndroidArtifact.java:520)at com.android.build.gradle.internal.scope。 OutputScope.lambda $ parallelForEachOutput $ 6(OutputScope.java:185)at com.android.build.gradle.internal.scope.OutputScope.lambda $ parallelForEachOutput $ 7(OutputScope.java:202)at com.android.build.gradle.internal。 scope.OutputScope.lambda $ null $ 8(OutputScope.java:224)“com.android.apksig.internal.apk.v1.V1SchemeSigner.checkEntryNameValid(V1SchemeSigner.java:406)at com.android.apksig.internal.apk。 v1.V1SchemeSigner.generateManifestFile(V1SchemeSigner.java:373)at com.android.apksig.internal.apk.v1.V1SchemeSigner.sign(V1SchemeSigner.java:253)at com.android.apksig.DefaultApkSignerEngine。 outputJarEntries(DefaultApkSignerEngine.java:372)at com.android.apkzlib.sign.SigningExtension.onOutputZipReadyForUpdate(SigningExtension.java:295)… 13 more

在2分49秒内造成失败

经过更多的使用gradle assemble --stacktrace命令的调查,我发现问题是使用APK压缩过程:

错误:org.gradle.tooling.BuildException:无法生成v1签名错误:java.io.IOException:无法生成v1签名错误:com.android.apksig.apk.ApkFormatException:ZIP项目名称中不支持的字符0x0d“assets /图标?”

有一个名为“Icon?”的文件 在我的项目中,这是一个MacOS文件,表示文件夹的图标,里面包含CR, LF字符。

我删除了文件,现在一切工作正常。

在Android Studio Canary 4之后的所有版本中都出现了这个问题,我将此问题报告给Android Studio团队https://issuetracker.google.com/issues/63885809

他们提到:

3.0 Canary 4是关于我们添加“不受支持的字符”检查的时候,所以这就是为什么它会从该版本向前发生。

他们正在调查更多的解决这个问题,我希望这个答案帮助别人不浪费一个月不更新他们的Android Studio。 🙂