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)
這個錯誤單個拿出來講解一下,是因為記錄一下日常開發排錯的方式以及日志的查閱:
這個錯誤網上大部分的解決方式是:在項目的gradle.properties中添加一行 android.enableAapt2=false 的代碼
但是這種方式好像也並不能解決全部情況下的該問題,而且這種方式已經過時了。
我遇到的問題加上這一句雖然不會報這個錯誤了,會報另一個錯:
NoSuchElementException
Caused by: java.util.NoSuchElementException
at com.google.common.collect.AbstractIndexedListIterator.next(AbstractIndexedListIterator.java:80)
at com.google.common.collect.Iterators.getOnlyElement(Iterators.java:315)
at com.google.common.collect.Iterables.getOnlyElement(Iterables.java:263)
at com.android.builder.internal.aapt.v1.AaptV1.makePackageProcessBuilder(AaptV1.java:202)
at com.android.builder.internal.aapt.AbstractProcessExecutionAapt.makeValidatedPackage(AbstractProcessExecutionAapt.java:67)
at com.android.builder.internal.aapt.AbstractAapt.link(AbstractAapt.java:34)
at com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:807)
... 58 more
所以並沒有解決問題,這種解決方式我們就放棄了。
另一種解決方式,接下來我們就開始查看詳細日志,查找問題所在:
編譯失敗后,會有錯誤信息,但是這個錯誤信息並沒有告訴我們代碼哪里出現了問題,這個時候我們需要查看更詳細的日志,怎么查看?我們先確定在哪個 task 下出錯,圖中圈中所示: mergeDebugResources 出現錯誤。
我們在 Terminal 中敲入命令運行:gradlew mergeDebugResources --stacktrace -info
在日志中找到該信息,得認真一點找,這個信息是不是就告訴我們代碼哪里出問題了。main module 中的 values.xml 116 行和117 行出問題了。我們進去看看:
改正后,問題這樣就解決了,是不是很開森。