自上次更新以来构建失败

Posted

技术标签:

【中文标题】自上次更新以来构建失败【英文标题】:Build failing since last update 【发布时间】:2018-09-23 12:06:49 【问题描述】:

自从我大约十天前更新了 android Studio 以来,我无法构建我的 Android 项目。我昨天再次更新了它,但我仍然无法构建项目。最糟糕的是我无法确定这个问题的根源(我真的是 Android 菜鸟)。

在构建报告窗口中,它显示:

运行构建 > 运行任务 > :app:processDebugResources > 执行 TaskAction:

org.gradle.tooling.BuildException:无法处理资源,请参阅 上面的 aapt 输出以获取详细信息。在 com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask.invokeAaptForSplit(LinkApplicationAndroidResourcesTask.java:512) 在 com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask.doFullTask​​Action(LinkApplicationAndroidResourcesTask.java:249) 在 com.android.build.gradle.internal.tasks.IncrementalTask​​.taskAction(IncrementalTask​​.java:106) 在 sun.reflect.GeneratedMethodAccessor179.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73) 在 org.gradle.api.internal.project.taskfactory.IncrementalTask​​Action.doExecute(IncrementalTask​​Action.java:46) 在 org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39) 在 org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70) 在 org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51) 在 org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62) 在 org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) 在 org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60) 在 org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97) 在 org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87) 在 org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52) 在 org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) 在 org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54) 在 org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) 在 org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34) 在 org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) 在 org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241) 在 org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230) 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123) 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79) 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104) 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98) 在 org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:626) 在 org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581) 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98) 在 org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) 在 org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) 在 java.lang.Thread.run(Thread.java:745) 被抑制: java.lang.RuntimeException:某些文件处理失败,请参阅日志 详情在 com.android.builder.internal.aapt.QueuedResourceProcessor.waitForAll(QueuedResourceProcessor.java:121) 在 com.android.builder.internal.aapt.QueuedResourceProcessor.end(QueuedResourceProcessor.java:141) 在 com.android.builder.internal.aapt.v2.QueueableAapt2.close(QueueableAapt2.java:104) 在 com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask.doFullTask​​Action(LinkApplicationAndroidResourcesTask.java:293) ... 47 更多原因: com.android.ide.common.process.ProcessException:执行失败 适应于 com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:809) 在 com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:797) 在 com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask.invokeAaptForSplit(LinkApplicationAndroidResourcesTask.java:491) ... 48 更多原因:java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception:AAPT2 错误: 检查日志以获取详细信息 com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503) 在 com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:482) 在 com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:79) 在 com.android.builder.internal.aapt.AbstractAapt.link(AbstractAapt.java:34) 在 com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:807) ... 50 更多原因:java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception:AAPT2 错误: 检查日志以获取详细信息 com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503) 在 com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:462) 在 com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:79) 在 com.android.builder.internal.aapt.v2.QueueableAapt2.lambda$makeValidatedPackage$1(QueueableAapt2.java:166) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ... 1 更多原因: com.android.builder.internal.aapt.v2.Aapt2Exception:AAPT2 错误: 检查日志以获取详细信息 com.android.builder.png.AaptProcess$NotifierProcessOutput.handleOutput(AaptProcess.java:443) 在 com.android.builder.png.AaptProcess$NotifierProcessOutput.err(AaptProcess.java:395) 在 com.android.builder.png.AaptProcess$ProcessOutputFacade.err(AaptProcess.java:312) 在 com.android.utils.GrabProcessOutput$1.run(GrabProcessOutput.java:104)

Java 编译器: > 链接引用失败

Android 问题: > ../../.gradle/caches/transforms-1/files-1.1/actionbarsherlock-4.4.0.aar/278d29925e50f728f41382ea6efbdca1/res/values/values.xml > 错误:资源 android:attr/popupPromptView 是私有的。

这个项目从我两年前开始就使用 actionbarsherlock,这是我项目的第五个版本增量,我从来没有遇到过这样的问题。

我已经无数次地使缓存和清理项目无效。我删除了文件夹:.gradle、gradle、grdl、grdl.gradle、.idea、build,并删除了 .iml 文件。

我尝试了更高的 minSdkVersion 和 compileSdkVersion,但没有任何帮助。

我还应该在这里发布什么来揭示无法构建的原因?

【问题讨论】:

我也面临同样的问题。你解决了吗? 如果其他人遇到同样的问题,我通过将android.enableAapt2=false 添加到我项目的gradle.properties 文件来解决它。参考:***.com/a/46241073/1329901 【参考方案1】:

检查以下内容并更新:

    minSdkVersion 16 >= 14 compileSdkVersion 27 支持库版本27.1.1 在整个项目中找到 android:attr/popupPromptView 并将其删除,因为日志显示它现在是私有的。 将 actionbarsherlock 更改为 AppCompat 并查看错误是否仍然存在并更新

【讨论】:

Android studio 提示:无法找到 Build Tools 版本 27.1.1,点击链接进行安装后,弹出窗口提示:所有包都无法下载!以下包不可用: - 包 id build-tools;27.1.1 关于 popupPromptView - 在我的项目中没有引用它,它是 actionbarsherlock 的一部分,有问题的行在 ../../.gradle/caches/transforms-1/files-1.1/ actionbarsherlock-4.4.0.aar/278d29925e50f728f41382ea6efbdca1/res/values/values.xml google() 添加到项目级 gradle 文件中的存储库块【参考方案2】:

首先备份项目文件夹。然后删除应用程序内和应用程序文件夹外的所有构建文件夹。然后删除除“app”文件夹、build.gradle、build.properties、settings.gradle 文件之外不需要的其他文件夹和文件。然后在 android studio 中打开这个项目并添加新的 gradle 设置。同步您的项目并配置 gradle 设置后,单击 Build -> Rebuild project。如果一切顺利,我认为将成功构建项目。尝试这个。

【讨论】:

【参考方案3】:

在我的情况下,我缺少一个资源文件,将其添加为响应,因此可能有人遇到相同问题会尝试它,即 res 文件夹中的 file.xml

【讨论】:

【参考方案4】:

我遇到了同样的问题,解决方法如下。

首先,您可以通过将android.enableAapt2=false 添加到项目的gradle.properties 文件中来解决它,正如一些人所提到的,但这很快就会被弃用,因此从长远来看并不好。

当然,问题是 actionbarsherlock 从 2014 年开始就不再受支持,而且有些东西坏了。

我通过将actionbarsherlock 带入项目并进行必要的修改解决了这个问题:

    将必要的文件复制到您的项目中,我刚刚从http://actionbarsherlock.com/ 下载了最新版本。将ActionBarSherlock\actionbarsherlock\src中的两个文件夹ActionBarSherlock\actionbarsherlock\res合并到您的项目中

    链接到android-support-v4.jar 库,它的任何版本似乎都可以工作

    com.actionbarsherlock.R 替换为com.yourname.R

    去掉app\src\main\res\values\abs__attrs.xml中的android:popupPromptView,原来的问题制造者,其实是一个未使用的资源。

    按照here 中描述的步骤修复由旧代码引起的轻微编译问题。

希望有帮助

【讨论】:

以上是关于自上次更新以来构建失败的主要内容,如果未能解决你的问题,请参考以下文章

自 OS X 上 XAMPP 5.6.8 上的 PHP 5.6.8 以来,stream_socket_client() 失败

自上次 chrome 更新以来,我的 HTML 输入字段默认为“只读”

Python测试框架pytest(16)运行上次失败用例查看与清除缓存cache自定义标记mark

错误:找不到要更新的行。自上次读取以来,某些值可能已更改。关于将提供程序从 SQLOLEDB 更改为 MSOLEDBSQL

在发布版本中获取MTOUCH:错误MT5213:重复符号

自用户上次登录Django以来如何检查新帖子