1

我有一个因错误而失败的 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,但它们似乎没有修复。

那么为什么构建失败呢?

4

1 回答 1

4

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

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

事实上,从日志来看,gradle 正在寻找里面的缓存C:\Windows\System32\config\systemprofile\.gradle,只有管理员权限才能访问。不是我们想要缓存库的地方。

这个答案以及gradle 论坛上的这篇文章是导致我找到解决方案的原因。简短的版本是,默认情况下,gradle 将下载的库缓存在用户区,并且Java中似乎存在一个错误,它会错误地确定用户的主目录。这导致 gradle 缓存被放置在它真正不应该放置的地方。

为了解决这个问题,我们只需要设置 gradle 的用户主目录。这篇博客文章有很多方法可以做到这一点。一种方法是创建一个 GRADLE_USER_HOME 环境变量,它的优点是适用于机器上的所有 gradle 构建。

于 2018-05-23T13:55:51.190 回答