java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT2 error: check logs for details


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 行出問題了。我們進去看看:

改正后,問題這樣就解決了,是不是很開森。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM