天天看點

Android Studio 3.1.2 新項目報錯 AAPT2 error: check logs for details (Gradle 3.1.2)排除代碼問題列印報錯資訊問題根源解決辦法

原本好好的項目,突然有一天打開就開始報錯AAPT2 error: check logsfor details。

Android Studio 3.1.2 新項目報錯 AAPT2 error: check logs for details (Gradle 3.1.2)排除代碼問題列印報錯資訊問題根源解決辦法

展開錯誤詳細資訊

Android Studio 3.1.2 新項目報錯 AAPT2 error: check logs for details (Gradle 3.1.2)排除代碼問題列印報錯資訊問題根源解決辦法

錯誤文本

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 details
	at 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 details
	at 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 more
	Suppressed: java.lang.RuntimeException: Some file processing failed, see logs for details
		at 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 details
	at 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 details
	at 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 details
	at 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時報出同樣的錯誤

Android Studio 3.1.2 新項目報錯 AAPT2 error: check logs for details (Gradle 3.1.2)排除代碼問題列印報錯資訊問題根源解決辦法

查閱資料,有網友表示“如果有問題可以退回到之前的版本,打開gradle.properties,添加如下内容”

android.enableAapt2=false
           

對于一個習慣跟在技術更新前沿的人來說,回退版本是不可能的,這輩子都不可能的,但是添加代碼還是可以試試,于是便做出了嘗試,但還是遇到了報錯:

Android Studio 3.1.2 新項目報錯 AAPT2 error: check logs for details (Gradle 3.1.2)排除代碼問題列印報錯資訊問題根源解決辦法

錯誤資訊:

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中直接操作也可以,然後敲入一個指令:

gradlew compileDebug --stacktrace
           

就可以輸出較詳細的資訊,然後根據指令行給出的提示,還可以在後面加上-info或者-debug的選項得到更詳細的資訊,于是這個指令可以這樣寫:

gradlew compileDebug --stacktrace -info
           

或者:

gradlew compileDebug --stacktrace -debug
           

先試第一行代碼

在Android Studio自帶的Terminal内輸入

gradlew compileDebug --stacktrace
           
Android Studio 3.1.2 新項目報錯 AAPT2 error: check logs for details (Gradle 3.1.2)排除代碼問題列印報錯資訊問題根源解決辦法

回車之後并沒有給我們太多提示,但是在建議中有一句提到“Task'compileDebug' is ambiguous in root project”(翻譯:指令“'compileDebug”在根項目中是不明确的),回看之前的報錯,第一行提到了一個資源異常“ResourceException”

Android Studio 3.1.2 新項目報錯 AAPT2 error: check logs for details (Gradle 3.1.2)排除代碼問題列印報錯資訊問題根源解決辦法

于是嘗試着把指令改成了

gradlew compileDebugSources --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},
[email protected]} : 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},
[email protected]} : 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},
[email protected]} : 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成功!

Android Studio 3.1.2 新項目報錯 AAPT2 error: check logs for details (Gradle 3.1.2)排除代碼問題列印報錯資訊問題根源解決辦法

二、指定你的項目使用較新的gradle 插件

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

repositories {
        google()
        ...
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0-alpha11'
    }
}
           

最後還是提醒大家,開發程式不要使用中文目錄,會帶來無窮的困擾啊!!!