我有一个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错误的问题,例如this和this,但他们似乎没有解决问题。
那么为什么构建失败?
答案 0 :(得分:3)
根据第一个相关问题,禁用AAPT2似乎是一个坏主意,因为AAPT可能会在将来某个时候删除。
第二个链接问题至少给出了一个线索,接受的答案是该版本的gradle不处理.gradle缓存路径中的非ASCII字符。但在我们的例子中,缓存路径中没有任何非ASCII字符被记录。
实际上,从日志中,gradle正在查找C:\Windows\System32\config\systemprofile\.gradle
内的缓存,该缓存只能通过管理员权限访问。不是我们想要缓存库的地方。
This回答,以及gradle论坛上的this post是让我找到解决方案的原因。默认情况下,短版本会在用户区域中缓存已下载的库,并且似乎有bug in Java,它将错误地确定用户主目录。这导致gradle缓存放在它真正不应该的位置。
要解决问题,我们只需要设置gradle的用户主目录。 This blog post有很多方法可以做到这一点。一种方法是创建一个GRADLE_USER_HOME环境变量,它具有应用于机器上所有gradle构建的优点。