我有一个哈德森(Hudson)建造工作,失败了,并报错

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

在日志中,很多行是这样的:
C:\Windows\System32\config\systemprofile\.gradle\caches\transforms-1\files-1.1\appcompat-v7-26.1.0.aar\3bbc697d357b69b5ea5f78a35f99a514\res\color\abc_hint_foreground_material_dark.xml: error: file not found.

我发现了一些关于AAPT2错误的问题,例如thisthis,但它们似乎没有解决方法。

那么,为什么构建失败?

最佳答案

根据第一个链接的问题,禁用AAPT2似乎是个坏主意,因为将来可能会删除AAPT。

第二个链接的问题至少提供了一个线索,在已接受的答案中,该gradle版本不处理.gradle缓存路径中的非ASCII字符。但是在我们的情况下,正在记录的缓存路径中没有任何非ASCII字符。

实际上,gradle从日志中寻找C:\Windows\System32\config\systemprofile\.gradle内的缓存,该缓存只能通过管理员权限访问。不是我们想要缓存库的地方。

gradt论坛上的This答案以及this post就是导致我找到解决方案的原因。短版本是,默认情况下,gradle将下载的库缓存在用户区域中,并且似乎存在bug in Java,它将错误地确定用户的主目录。这导致gradle缓存被放置在它实际上不应该放置的地方。

为了解决这个问题,我们只需要设置gradle的用户主目录即可。 This blog post有很多方法可以做到这一点。一种方法是创建GRADLE_USER_HOME环境变量,该变量具有适用于计算机上所有gradle构建的优点。

09-10 06:21
查看更多