转载:Android Studio 3.1.2 新项目报错 AAPT2 error: check logs for details (Gradle 3.1.2)

转载自 https://blog.csdn.net/u011618035/article/details/80574645

原本好好的项目,突然有一天打开就开始报错AAPT2 error: check logsfor details。

 

展开错误详细信息

错误文本

com.android.build.gradle.tasks.ResourceException:Error: java.util.concurrent.ExecutionException:com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logsfor details
 


错误全文

com.android.build.gradle.tasks.ResourceException: Error: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for detailsat com.android.build.gradle.tasks.MergeResources.doFullTaskAction(MergeResources.java:296)at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.java:106)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:46)at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121)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.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110)at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)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: Error: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for detailsat com.android.ide.common.res2.MergedResourceWriter.end(MergedResourceWriter.java:332)at com.android.ide.common.res2.DataMerger.mergeData(DataMerger.java:301)at com.android.ide.common.res2.ResourceMerger.mergeData(ResourceMerger.java:412)at com.android.build.gradle.tasks.MergeResources.doFullTaskAction(MergeResources.java:285)... 48 moreSuppressed: java.lang.RuntimeException: Some file processing failed, see logs for detailsat com.android.builder.internal.aapt.QueuedResourceProcessor.waitForAll(QueuedResourceProcessor.java:121)at com.android.builder.internal.aapt.QueuedResourceProcessor.end(QueuedResourceProcessor.java:141)at com.android.builder.internal.aapt.v2.QueueableAapt2.close(QueueableAapt2.java:104)at com.android.build.gradle.tasks.MergeResources.doFullTaskAction(MergeResources.java:293)... 48 more
Caused by: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for detailsat com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503)at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:462)at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:79)at com.android.ide.common.res2.MergedResourceWriter.end(MergedResourceWriter.java:327)... 51 more
Caused by: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for detailsat com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503)at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:462)at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:79)at com.android.builder.internal.aapt.v2.QueueableAapt2.lambda$compile$0(QueueableAapt2.java:136)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)... 1 more
Caused by: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for detailsat com.android.builder.png.AaptProcess$NotifierProcessOutput.handleOutput(AaptProcess.java:443)at com.android.builder.png.AaptProcess$NotifierProcessOutput.err(AaptProcess.java:395)at com.android.builder.png.AaptProcess$ProcessOutputFacade.err(AaptProcess.java:312)at com.android.utils.GrabProcessOutput$1.run(GrabProcessOutput.java:104)


 

排除代码问题

检查了半天没有找到问题在哪,又换另一台电脑,同样的代码和IDE(都是Android Studio 3.1.2,只是在Ubuntu上),运行没有任何问题,那么问题应该并不是出在代码上,于是想到新建一个项目试试。于是直接创建了一个新项目,没有修改任何设置,创建了一个甚至连活动都没有新项目

果然,刚刚创建的项目在Build时报出同样的错误

 

查阅资料,有网友表示“如果有问题可以退回到之前的版本,打开gradle.properties,添加如下内容”

android.enableAapt2=false

对于一个习惯跟在技术更新前沿的人来说,回退版本是不可能的,这辈子都不可能的,但是添加代码还是可以试试,于是便做出了尝试,但还是遇到了报错:

 

错误信息:

The option 'android.enableAapt2' isdeprecated and should not be used anymore.
Use 'android.enableAapt2=true' to removethis warning.
It will be removed at the end of 2018..

翻译一下就是:

选项“android.enableAapt2”已被弃用,不应再使用。
使用“android.enableAapt2=true”来删除这个警告。
它将在2018年底被移除。

很明显,我们使用“android.enableAapt2=false”来关闭AAPT2是行不通的,这个方法已经过时了,关闭之后Android Studio告诉我们要把它打开,这样就陷入了一个死循环,所以我们还是需要找到问题的根本原因在哪里才能解决。

所以直接删除了刚才插入的“android.enableAapt2=false”继续找办法

 

打印报错信息

查阅各方资料,学到了一个可以在Android studio中打印详细报错信息的方法:

在命令行中进入项目的根目录,或者可以在Android studio的Terminal中直接操作也可以,然后敲入一个命令:

gradlewcompileDebug --stacktrace

就可以输出较详细的信息,然后根据命令行给出的提示,还可以在后面加上-info或者-debug的选项得到更详细的信息,于是这个命令可以这样写:

gradlewcompileDebug --stacktrace -info

或者:

gradlewcompileDebug --stacktrace -debug

先试第一行代码

在Android Studio自带的Terminal内输入

gradlewcompileDebug --stacktrace


回车之后并没有给我们太多提示,但是在建议中有一句提到“Task'compileDebug' is ambiguous in root project”(翻译:命令“'compileDebug”在根项目中是不明确的),回看之前的报错,第一行提到了一个资源异常“ResourceException”

于是尝试着把命令改成了

gradlewcompileDebugSources --stacktrace -info

再看显示出来的信息,好像发现了点什么

错误信息

> Task :app:mergeDebugResources FAILED
Exception while processing job : QueuedJob{
title=Compiling abc_ic_menu_copy_mtrl_am_alpha.png,
task={from=C:\Users\郑维一\.gradle\caches\transforms-1\files-1.1\appcompat-v7-26.1.0.aar\a55ab1e075dbd5b5da002f93c40b9cfb\res\drawable-xhdpi-v4\abc_ic_menu_copy_mtrl_am_alpha.png, to=F:\Projects\AndroidStudioProjects\JinchengNewsAndroid\app\build\intermediates\res\merged\debug},
future=com.google.common.util.concurrent.SettableFuture@4d8f81a6} : com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details
Exception while processing job : QueuedJob{
title=Compiling abc_btn_radio_to_on_mtrl_000.png,
task={from=C:\Users\郑维一\.gradle\caches\transforms-1\files-1.1\appcompat-v7-26.1.0.aar\a55ab1e075dbd5b5da002f93c40b9cfb\res\drawable-hdpi-v4\abc_btn_radio_to_on_mtrl_000.png, to=F:\Projects\AndroidStudioProjects\JinchengNewsAndroid\app\build\intermediates\res\merged\debug},
future=com.google.common.util.concurrent.SettableFuture@6d94b091} : com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details
Exception while processing job : QueuedJob{
title=Compiling notify_panel_notification_icon_bg.png,
task={from=C:\Users\郑维一\.gradle\caches\transforms-1\files-1.1\support-compat-26.1.0.aar\2efeba8952eb2c0e463a57b63c49f99f\res\drawable-xhdpi-v4\notify_panel_notification_icon_bg.png, to=F:\Projects\AndroidStudioProjects\JinchengNewsAndroid\app\build\intermediates\res\merged\debug},
future=com.google.common.util.concurrent.SettableFuture@19e643ef} : com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details
Shutdown finished in 244ms
Error: java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details

:app:mergeDebugResources (Thread[Task worker for ‘:’ Thread 3,5,main]) completed. Took 5.716 secs.

发现了中文!

敏感的察觉到,这里可能有问题!(胡说八道,其实是请教了一位大佬)

 

问题根源

“有人提到目前的这种非AsciⅡ的确是AAPT2和Gradle插件的一个bug,但现在已经被修复,只是Android Studio还未更新成这个被修复的版本。”(大佬说的,暂未查证资料来源)

 

解决办法

所以现在有两个解决办法,

 

一、修改gradle的缓存目录

这个可以通过android studio的设置中找到gradle,配置另一个非中文目录来缓存。

File -> Settings -> Build, Execution,Deployment -> Gradle

进入这个页面找到“Service directory path”项,将里面的路径换到一个非中文路径就好了

build成功!


 

二、指定你的项目使用较新的gradle 插件

在build.gradle(Project)中修改Gradle版本到3.2.0-alpha11或更新版本就可以了

  1. repositories {
  2. google()
  3. }
  4. dependencies {
  5. classpath ‘com.android.tools.build:gradle:3.2.0-alpha11’
  6. }
  7. }


最后还是提醒大家,开发程序不要使用中文目录,会带来无穷的困扰啊!!!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508530.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

23种设计模式之迭代器模式

迭代器模式的定义 定义: 它提供一种方法访问一个容器对象中各个元素, 而又不需暴露该对象的内部细节 其类图如下: 其中角色: Iterator 抽象迭代器: 抽象迭代器负责定义访问和遍历元素的接口, 而且基本上是有固定的三个方法: first()获得第一个元素, next()访问下一个元素, i…

23种设计模式之适配器模式

适配器模式的定义 定义: 将一个类的接口变换成客户端所期待的另一种接口, 从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 通俗的说, 就是有 A、B两个接口, 现在要求把A和B安装在一起使用, 两者的接口不一致, 怎么办? 引入一个物体C, 如下图: 引入C物体后,…

23种设计模式之组合模式

组合模式的定义 定义: 将对象组合成树形结构以表示 "部分-整体" 的层次结构,使得用户对单个对象和组合对象的使用具有一致性. 通俗的说, 就是实现了树形结构 通用类图如下: 其中的三个角色如下: Component 抽象构件角色: 定义参加组合对象的共有方法和属性, 可以…

23种设计模式之观察者模式

观察者模式的定义 定义: 定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新 通俗的说, 就是一个类的某个条件满足时, 会调用一系列定义好的方法 其类图如下: 其中的4个角色: Subject 被观察者: 定义被观察者必须实现…

23种设计模式之访问者模式

访问者模式的定义 定义: 封装一些作用于某种数据结构中的各元素的操作, 它可以在不改变数据结构的前提下定义作用于这些元素的新的操作 通俗的说, 就是定义一个访问者角色, 当对指定角色进行访问时要通过访问者进行访问 其类图如下: 各角色说明: Vistor 抽象访问者: 抽象类…

23种设计模式之解释器模式

解释器模式的定义 定义: 给定一门语言,定义它的文法的一种表示, 并定义一个解释器, 该解释器使用该表示来解释语言中的句子. 其类图如下: 其中的角色说明: AbstractExpression 抽象解释器: 具体的解释任务由各个实现类完成TerminalExpression 终结符表达式: 实现与文法中的元…

23种设计模式之备忘录模式

备忘录模式的定义 定义: 在不破坏封装性的前提下, 捕获一个对象的内部状态, 并在该对象之外保存这个状态. 这样以后就可将该对象回复到原先保存的状态 通俗的说, 就是记录下类的当前状态, 当需要的时候恢复 类图如下: 其中各角色如下: Originator 发起人角色: 记录当前时刻…

23种设计模式之状态模式

状态模式的定义 定义: 当一个对象内在状态改变时允许其改变行为, 这个对象看起来像改变了其类 通俗的说, 就是一个事物有不同的状态,在不同状态下执行各个方法时有不同的表现, 将每个状态都封装成一个类, 然后通过上下文对象统一管理 其类图如下: 其中的三个角色如下: Stat…

二维码的纠错码原理及细节

参考文档: https://www.thonky.com/qr-code-tutorial/error-correction-coding 1. 消息多项式 消息多项式的系数组成:数字码字。如“hello world” ,利用二维码的编码原理,转换成十进制数字为“32, 91, 11, 120, 209, 114, 220, 77, 67, 64…

Android 二维码扫码功能实现(Zxing集成,避坑启示)

这两天想要实现一个能扫码的app,找了一下,发现zxing用的比较多,就在网上找了找怎么用zxing。我主要是按照宇宝守护神的博文“Android 二维码的扫码功能实现(一)”的步骤完成的,博文链接在此:htt…

23种设计模式之桥梁模式

桥梁模式的定义 定义: 将抽象和实现解耦, 使得两者可以独立的变化 通俗的说, 就是一个类调用另一个类中的方法, 需要一个桥梁, 通过聚合的关系调用 其类图如下: 其中角色说明如下: Abstraction 抽象化角色: 它的主要职责是定义出该角色的行为, 同时保存一个对实现化角色的引…

23种设计模式之享元模式

享元模式的定义 定义: 使用共享对象可有效的支持大量的细粒度的对象 通俗的说, 就是将类的通用属性抽出来,建立对象池,以达到限制对象数量的效果 上面定义中要求细粒度对象, 那么不可避免的使得对象数量多且性质相近, 我们将这些对象的信息分为两个部分: 内部状态和外部状态…

射频(RF)基本理论:定义、特性、调制、扩频

参考: INTRO TO SDR AND RF SIGNAL ANALYSIS 一文让你读懂调幅、调相、调频、 与 I/Q 调制?它们的区别详解 无线网络技术教程(第二版) 金光、江先亮编 数字调制系列:IQ调制基本理论 1. 什么是射频? …

设计模式之规格模式

规格模式 规格模式 使用了策略模式,组合模式. 只不过将模式具体化了 规格模式将 与或非 操作进行了封装, 实现了类似 SQL查询语句的操作. 类图如下: 其中的角色如下: ISpecification 抽象规格书: 对规格书的抽象定义CompositeSpecification 组合规格书: 抽象类, 对规格书进…

设计模式之雇工模式

雇工模式 雇工模式也叫仆人模式, 其意图为: 雇工模式是行为模式的一种, 它为一组类提供通用的功能,而不需要类实现这些功能,它是命令模式的一种扩展. 其类图如下: 其中角色如下: IServiced : 用于定义服务内容的接口Serviced1 : 具体的服务提供者Servant : 执行者,即雇工类,…

设计模式之对象池模式

对象池模式 对象池模式, 或者称为对象池服务, 其意图为: 通过循环使用对象, 减少资源在初始化和释放时的昂贵损耗(这里的"昂贵"可能是时间效益(如性能), 也可能是空间效益(如并行处理), 在大多情况下, 指性能) 简单的说, 在需要时,从池中提取,不用时,放回池中,等待…

WiFi的基本调制过程

参考:Parallel Inclusive Communication for Connecting Heterogeneous IoT Devices at the Edge 基本的WiFi调制分为以下三个步骤: 1. 将信号调制到正弦波上。 WiFi采用QAM(正交振幅调制),用I/Q信号表示的话&#…

设计模式之黑板模式

黑板模式的意图 黑板模式是观察者模式的一个扩展,知名度并不高,但使用的范围却非常广. 其意图为: 允许消息的读写同时进行, 广泛的交互消息. 简单的说, 黑板模式允许多个消息读写者同时存在, 消息的生产者和消费者完全分开. 这就像一个黑板, 任何一个老师(消息的生产者)都可以…

蓝牙调制

参考:Parallel Inclusive Communication for Connecting Heterogeneous IoT Devices at the Edge 《从创意到原型:物联网应用快速开发》 董玮,高艺编著 详解蓝牙标准中的GFSK调制:https://blog.csdn.net/lovehua365/article/detai…

设计模式之空对象模式

空对象模式 空对象模式是通过实现一个默认的无意义对象来避免null值出现, 简单地说,就是为了避免在程序中出现null值判断而诞生的一种常用设计方法. 举个简单的例子, 一个听动物叫声的模拟程序: 动物代码: 听叫声的人: 现在我们想, 能不能把 animal 的空值判断去掉呢?我们增…